我正在处理pandas DataFrames,其中列可能包含表示数字的字符串,可能包含意外的非数字字符,字符串表示的数字可能是float或int类型。例如,DataFrame可能包含类似" $ 625,452,242.95"浮动625452242.95或" 53.000.395"对于等于53000395的int.DataFrame正在从CSV文件中读取,并且可能非常大。
将DataFrame中所有此类字符串转换为相应数字类型的最有效方法是什么?谢谢。
答案 0 :(得分:5)
您也可以尝试替换这些符号和分隔符:
In [27]: df = pd.DataFrame([['$1,111'], ['$2,222']])
In [28]: df
Out[28]:
0
0 $1,111
1 $2,222
In [29]: df[0] = df[0].str.replace(r'[$,]', '').astype('float')
In [30]: df
Out[30]:
0
0 1111
1 2222
答案 1 :(得分:2)
如果所有千位分隔符都是小数,请使用thousands='.'
。
对于有钱的列,编写一个函数来切断$并将剩余的字符串转换为整数或浮点数。通过read_csv
将其传递给converters
。 (再次,请参阅文档。)
我预计任何自定义转换器都会很慢 - read_csv在C中无情优化 - 所以尽可能使用内置功能(例如thousands
关键字)。