python - 熊猫数据框货币到数字
问题描述
我知道还有其他类似的主题,但我已经尝试了所有这些并没有成功。我正在阅读其中一列(“总”)充满货币(如 2,553.00 美元)的数据框
这就是我在数据框中读取的方式:
columns=['Client','year','month','traffic','Source','Leads','Sold','Gross']
return pd.read_csv(filename,thousands=',',decimal=".", index_col='Client',parse_dates=True,encoding = "ISO-8859-1",usecols=columns)
我现在尝试了几种将货币列转换为浮点数的方法,以便对其进行计算,例如以下内容:
data = data.apply(lambda x: x.str.replace(',','.'))
data['Gross'] = data['Gross'].fillna(0.0).str.replace(r'[$,-]', '').astype('float')
这给了我以下错误:
Traceback (most recent call last):
File "C:\Users\Laila\Desktop\tool5.py", line 136, in <module>
data=getData()
File "C:\Users\Laila\Desktop\tool5.py", line 123, in getData
data = data.apply(lambda x: x.str.replace(',','.'))
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\frame.py", line 4877, in apply
ignore_failures=ignore_failures)
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\frame.py", line 4973, in _apply_standard
results[i] = func(v)
File "C:\Users\Laila\Desktop\tool5.py", line 123, in <lambda>
data = data.apply(lambda x: x.str.replace(',','.'))
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\generic.py", line 3610, in __getattr__
return object.__getattribute__(self, name)
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\accessor.py", line 54, in __get__
return self.construct_accessor(instance)
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\strings.py", line 1910, in _make_accessor
raise AttributeError("Can only use .str accessor with string "
AttributeError: ('Can only use .str accessor with string values, which use np.object_ dtype in pandas', 'occurred at index year')
[Finished in 7.4s with exit code 1]
[shell_cmd: python -u "C:\Users\Laila\Desktop\crmtool5.py"]
[dir: C:\Users\Laila\Desktop]
[path: C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\Scripts\;C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\;C:\Users\Laila\AppData\Local\Microsoft\WindowsApps;]
或者:
data[['Gross']] = data[['Gross']].replace('[\$]','',regex=True).replace("-", "",regex=True).replace(',','.', regex=True)
data[['Gross']] = data[['Gross']].fillna(0.0).astype('float')
给我一个类似的错误:
Traceback (most recent call last):
File "C:\Users\Laila\Desktop\crmtool5.py", line 136, in <module>
data=getData()
File "C:\Users\Laila\Desktop\crmtool5.py", line 121, in getData
data[['Gross']] = data[['Gross']].fillna(0.0).astype('float')
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\util\_decorators.py", line 118, in wrapper
return func(*args, **kwargs)
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\generic.py", line 4004, in astype
**kwargs)
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\internals.py", line 3462, in astype
return self.apply('astype', dtype=dtype, **kwargs)
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\internals.py", line 3329, in apply
applied = getattr(b, f)(**kwargs)
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\internals.py", line 544, in astype
**kwargs)
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\internals.py", line 625, in _astype
values = astype_nansafe(values.ravel(), dtype, copy=True)
File "C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\dtypes\cast.py", line 703, in astype_nansafe
return arr.astype(dtype)
ValueError: could not convert string to float:
[Finished in 7.9s with exit code 1]
[shell_cmd: python -u "C:\Users\Laila\Desktop\crmtool5.py"]
[dir: C:\Users\Laila\Desktop]
[path: C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\Scripts\;C:\Users\Laila\AppData\Local\Programs\Python\Python36-32\;C:\Users\Laila\AppData\Local\Microsoft\WindowsApps;]
原始数据示例:
Client year month traffic Source Leads Sold Gross
dd 2018 March 6,778 x 0 1 -$27
dd 2018 March 6,778 yy 1 0 $0
dd 2018 March 6,778 z 2 1 $1,354
关于如何解决这个问题的任何建议?
解决方案
您正在尝试替换,
为,.
但生成的字符串无法转换为浮点数。例如,2.553.00 包含两个点,当将其转换为浮点数时,将引发异常。
将代码更改为:
data['Gross'] = data['Gross'].fillna(0.0).str.replace('[$,]', '').astype('float')
推荐阅读
- reactjs - react中setState是浅拷贝还是深拷贝
- regex - 从单行中提取多个值并将它们放在正则表达式中的同一组中
- python - 如何将一列中的每个单元格与熊猫中的特定值进行比较?
- wordpress - 在 WooCommerce 的购物车页面上更新数量时拆分购物车项目
- ios - 在调用错误时,就像使用未声明的类型“区”一样
- ios - AVPlayerItem.duration 和 AVPlayerItem.asset.duration 有什么区别?
- r - read.xlsx 文件,其中一列包含“数字作为文本”
- javascript - 导入错误:“react-table”不包含默认导出(导入为“ReactTable”)
- javascript - 使用 moment.js 创建 24/12 小时格式的时间数组
- html - 如何将 div 与表格右对齐?