我有一个包含货币符号的列的数据框,我正在寻找一种有效的方法来剥离这些符号,以便将列的数据类型转换为浮动
数据帧:
Date Money(ILS)
0 2020-05-02 ₪77,000.00
1 2020-04-30 ₪80,600.00
2 2020-07-29 ₪86,600.00
3 2020-10-27 ₪113,963.00
4 2021-01-25 ₪134,963.00
5 2021-04-25 ₪155,963.00
6 2021-07-24 ₪176,963.00
7 2021-10-22 ₪197,963.00
8 2022-01-20 ₪218,963.00
9 2022-04-20 ₪239,963.00
10 2022-07-19 ₪260,963.00
我想把钱栏上的₪符号去掉
我的职能:
@classmethod
def strip_symbols(cls):
cls.df = cls.df.apply(lambda x: x.str.strip('₪') if x.dtype == TypesConsts.OBJECT else x)
return cls.df
使用此方法,我得到以下错误:
AttributeError: Can only use .str accessor with string values!
显然,您将lambda函数应用于整个数据帧(所有 列),因此对于除对象之外的任何类型的列 例外
实际上,您应该只对列应用此函数 持有货币内容
但还有其他潜在的问题来源:如果任何列具有对象 类型,然后通常其所有元素都包含字符串数据,但是 当某些元素包含例如浮点数据时,可能是“恶意”情况 (float仍然是对象的后代)
尝试这样一个例子:设置数据帧的一个元素(Money(ILS)column) 到浮动值:
然后运行我建议的代码(仅剥离):
(我的测试数据包含$作为货币符号,所以我只使用了'$')
结果是:
(我添加了一个额外的列,使用了更少的行)
现在:
但要将此列转换为浮点,还必须(事先)去掉逗号, 也仅在实际字符串中:
最终解决方案
您不需要逐步进行这些转换。只需使用以下代码, 一气呵成:
现在,当您打印数据帧时:
当然,如果有其他“货币”列,也可以将此代码应用于其他“货币”列
仅对对象数据类型的get列使用^{} :
相关问题 更多 >
编程相关推荐