我有一个这样的数据框:
MONTH TIME PATH RATE
0 Feb 15:24:11 enp1s0 14.71Kb
我想创建一个函数,该函数可以识别RATE列中的是“ Kb”还是“ Mb”。如果RATE列中的条目末尾有'Kb'或'Mb',则将其去除'Kb'/'Mb'并执行将其转换为b的操作。到目前为止,这是我的代码,其中Dataframe将RATE视为对象:
df=pd.DataFrame(listOfLists)
def strip(bytesData):
if "Kb" in bytesData:
bytesData/1000
elif "Mb" in bytesData:
bytesData/1000000
df['RATE']=df.apply(lambda x: strip(x['byteData']), axis=1)
我如何在删除不需要的字符并将其转换为所需格式的同时更改列中的值?我知道此操作完成后,必须将其更改为int,但是,我似乎无法以所需的方式更改数据。提前致谢!
map(lambda x:)
由于我们正在处理一个系列而不是整个数据框架,因此我稍微修改了您的函数并使用而不是套用。此外,我还添加了一些其他行,以提供有关Kb和Mb的示例,如果两者都不存在:
example_df = pd.DataFrame({'Month':[0,1,2,3],
'Time':['15:32','16:42','17:11','15:21'],
'Path':['xxxxx','yyyyy','zzzzz','aaaaa'],
'Rate':['14.71Kb','18.21Mb','19.01Kb','Error_1']})
def case_1(value):
if value[-2:] == 'Kb':
return float(value[:-2])*1000
elif value[-2:] == 'Mb':
return float(value[:-2])*100000
else:
return np.nan
example_df['Rate'] = example_df['Rate'].map(lambda x: case_1(x))
该函数的逻辑是,如果以,Kb
然后将该值乘以1000结束,否则-如果以Mb
将该值乘以100000结束,否则简单地返回NaN(因为两个条件均不满足)输出:
Month Time Path Rate
0 0 15:32 xxxxx 14710.0
1 1 16:42 yyyyy 1821000.0
2 2 17:11 zzzzz 19010.0
3 3 15:21 aaaaa NaN
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句