我有一个从JSON输出创建的数据框,如下所示:
Total Revenue Average Revenue Purchase count Rate
Date
Monday 1,304.40 CA$ 20.07 CA$ 2,345 1.54 %
存储的值从JSON接收为字符串。我想:
1)删除条目中的所有字符(例如:CA $或%) 2)将费率和收入列转换为浮动 3)将计数列转换为int
我尝试执行以下操作:
df[column] = (df[column].str.split()).apply(lambda x: float(x[0]))
它工作正常,除非我有一个昏迷的值(例如:1,465不起作用,而143则不行)。
我尝试使用几个函数来替换“,”替换“”等。到目前为止没有任何工作。我总是收到以下错误:
ValueError:无法将字符串转换为float:'1,304.40'
答案 0 :(得分:0)
这些字符串的逗号为千位分隔符,因此您必须在调用float
之前将其删除:
df[column] = (df[column].str.split()).apply(lambda x: float(x[0].replace(',', '')))
通过在split
:
lambda
,可以稍微简化一下
df[column] = df[column].apply(lambda x: float(x.split()[0].replace(',', '')))
答案 1 :(得分:0)
具有list
理解力的另一个解决方案,如果需要string
functions仅适用于Series
(DataFrame
的列),例如str.split
, str.replace
:
df = pd.concat([df[col].str.split()
.str[0]
.str.replace(',','').astype(float) for col in df], axis=1)
#if need convert column Purchase count to int
df['Purchase count'] = df['Purchase count'].astype(int)
print (df)
Total Revenue Average Revenue Purchase count Rate
Date
Monday 1304.4 20.07 2345 1.54