2

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

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

4

2 回答 2

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
于 2013-07-16T04:04:25.213 回答
2

请参阅read_csv 文档

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

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

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

于 2013-07-16T03:50:17.037 回答