在pandas DataFrame中有效地将字符串转换为适当的数字类型

时间:2013-07-16 03:38:29

标签: python pandas

我正在处理pandas DataFrames,其中列可能包含表示数字的字符串,可能包含意外的非数字字符,字符串表示的数字可能是float或int类型。例如,DataFrame可能包含类似" $ 625,452,242.95"浮动625452242.95或" 53.000.395"对于等于53000395的int.DataFrame正在从CSV文件中读取,并且可能非常大。

将DataFrame中所有此类字符串转换为相应数字类型的最有效方法是什么?谢谢。

2 个答案:

答案 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)

请参阅read_csv documentation

  • 如果所有千位分隔符都是小数,请使用thousands='.'

  • 对于有钱的列,编写一个函数来切断$并将剩余的字符串转换为整数或浮点数。通过read_csv将其传递给converters。 (再次,请参阅文档。)

我预计任何自定义转换器都会很慢 - read_csv在C中无情优化 - 所以尽可能使用内置功能(例如thousands关键字)。