Python 将数据帧货币转换为数字
我知道还有其他类似的话题,但我都试过了,没有成功。 我正在读一个dataframa,其中一列(“总额”)充满了货币(如2553.00美元) 以下是我在数据框中的阅读方式:Python 将数据帧货币转换为数字,python,pandas,dataframe,Python,Pandas,Dataframe,我知道还有其他类似的话题,但我都试过了,没有成功。 我正在读一个dataframa,其中一列(“总额”)充满了货币(如2553.00美元) 以下是我在数据框中的阅读方式: columns=['Client','year','month','traffic','Source','Leads','Sold','Gross'] return pd.read_csv(filename,thousands=',',decimal=".", index_col='Client',p
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;]
给我一个类似的错误:
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;]
关于如何解决这个问题有什么建议吗?您正试图用
替换,
,但结果字符串无法转换为float。例如,2.553.00包含两个点,当将其转换为浮点时,将引发异常
将代码更改为:
data['Gross'] = data['Gross'].fillna(0.0).str.replace('[$,]', '').astype('float')
您正试图用
替换,
,但结果字符串无法转换为float。例如,2.553.00包含两个点,当将其转换为浮点时,将引发异常
将代码更改为:
data['Gross'] = data['Gross'].fillna(0.0).str.replace('[$,]', '').astype('float')
很难知道是什么导致了
值错误:在.astype('float')
中无法将字符串转换为float(第二个示例),而不查看数据。您能否隔离并共享运行此代码的一小块数据。很难知道是什么导致了ValueError:无法在.astype('float')
中将字符串转换为float
(第二个示例)而看不到您的数据。您可以隔离并共享运行此代码的一小块数据吗?然后,我遇到了负货币问题(ValueError:无法将字符串转换为float:“-”)@lailaverments:听起来其中一行只包含一个“-”,没有数字。您可以通过在astype('float')
之前执行replace('-$,'0.0')
将其替换为0。然后我就遇到了负货币问题(ValueError:无法将字符串转换为float:'-')@lailaverments:听起来其中一行只包含一个'-',没有数字。您可以通过在astype('float')
之前执行replace('-$,'0.0')
将其替换为0。
data['Gross'] = data['Gross'].fillna(0.0).str.replace('[$,]', '').astype('float')