在Python中,将"1,374"或"21,000,000"等字符串转换为1374或21000000等int值的干净而优雅的方法是什么?
我试图将IMF统计数据读入熊猫数据帧:
import pandas as pd
df = pd.read_table("http://www.imf.org/external/pubs/ft/weo/2013/02/weodata/WEOOct2013all.xls",
na_values=['n/a','--'],thousands=',')
Run Code Online (Sandbox Code Playgroud)
除了一个列之外的所有列都有dtype对象:
In [5]: df
Out[5]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 8318 entries, 0 to 8317
Data columns (total 49 columns):
...
dtypes: float64(1), object(48)
Run Code Online (Sandbox Code Playgroud)
我手动检查了文件,在大多数列中找不到任何非数字值或代码中明确提到的NaN值之一.
我在Wakari.io上的Anaconda 1.5.0上使用Python 2.7.5,numpy 1.7.1,pandas 0.11.0.
我已经使用熊猫导入了一个 csv 文件。
我的数据框有多个标题为“农场”、“苹果总数”和“好苹果”的列。
为“Total Apples”和“Good Apples”导入的数字数据包含表示千的逗号,例如 1,200 等。我想删除逗号,使数据看起来像 1200 等。
“Total Apples”和“Good Apples”列的变量类型作为对象出现。
我尝试使用df.str.replace,df.strip但没有成功。
还尝试将变量类型从对象更改为字符串,将对象更改为整数,但无法使其工作。
任何帮助将不胜感激。
****编辑****
来自使用 pd.read_csv 导入的 csv 文件的数据摘录:
Farm_Name Total Apples Good Apples
EM 18,327 14,176
EE 18,785 14,146
IW 635 486
L 33,929 24,586
NE 12,497 9,609
NW 30,756 23,765
SC 8,515 6,438
SE 22,896 17,914
SW 11,972 9,114
WM 27,251 20,931
Y 21,495 16,662
Run Code Online (Sandbox Code Playgroud) 我试图将 df 转换为所有数值,但出现以下错误。
ValueError: Unable to parse string "15,181.80" at position 0
Run Code Online (Sandbox Code Playgroud)
这是我当前的代码:
ValueError: Unable to parse string "15,181.80" at position 0
Run Code Online (Sandbox Code Playgroud)
在我尝试转换之前 df :
data = pd.read_csv('pub?gid=1704010735&single=true&output=csv',
usecols=[0,1,2],
header=0,
encoding="utf-8-sig",
index_col='Date')
data.apply(pd.to_numeric)
print("we have a total of:", len(data), " samples")
data.head()
Run Code Online (Sandbox Code Playgroud)
我认为问题在于它处理特殊字符 EG“,” - 这是正确的吗?帮助将 DF 转换为所有数值的最佳建议是什么?
谢谢!