csv 替换:未能将字符串转换为浮点型“”或“[text]”

enyaitl3  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(161)

我有一个很大的CSV,其中一些列包含数据,如

所示,我想去掉不必要的文本,并将其余数字从字符串转换为浮点数,只留下值。
我在用

Added['Household Occupants'] = Added['Household Occupants'].str.replace(r'[^0-9]', '').astype(float)

以及

Added['Grocery Spend'] = Added['Grocery Spend'].str.replace(r'\D', '').astype(float)

这些都做得很完美,但当我把同样的应用到"电子产品支出"和"商品支出"列时,我会得到错误,如;
'值错误:无法将字符串转换为浮点:""和"值错误:无法将字符串转换为浮点:"货物"
任何建议将不胜感激!提前感谢!

cnh2zyt3

cnh2zyt31#

我认为这是一个 * 很好的例子 *,其中pandas.Series.name可能很有用:

out = (
        Added.apply(lambda x: x.replace(f"{x.name.capitalize()}\((\d+)\)", r"\1",
                                        regex=True)
                               .astype(float))
      )

pandas.Series.str.extarct的另一种替代方案:

out = Added.apply(lambda x: x.str.extract("\((\d+)\)", expand=False).astype(float))
#输出:
print(out)

      Household Occupants  Grocery Spend  Electronics Spend  Goods Spend
0                     1.0          500.0             5000.0         50.0
1                     4.0           45.0              200.0          0.0
2                     NaN            NaN                NaN          NaN
3                     5.0            NaN                NaN          NaN
4                     3.0            NaN                NaN          NaN
1337                  4.0            NaN                NaN          NaN
1338                  4.0            NaN                NaN          NaN
1339                  4.0          200.0                NaN          NaN
1340                  4.0            NaN                NaN          NaN
1341                  NaN            NaN                NaN          NaN

相关问题