转换pandas数据框中包含nan、连字符和逗号的列的数据类型

Dee*_*ain 5 python pandas

df = pd.read_csv("data.csv", encoding = "ISO-8859-1")
Run Code Online (Sandbox Code Playgroud)

现在,我有一个列,其中的值如下:

参考样本数据:

在此输入图像描述

现在,我想使用以下代码将列 a 转换为数字格式:

df[['A']] = df[['A']].astype(int)
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误。问题是我将所有三个(nan、连字符和逗号)都放在一列中,并且需要一起解决它们。有没有更好的方法来转换这些而不用替换(nan 到 -1)之类的东西?

jez*_*ael 4

使用参数thousandsna_values,但在缺少值的情况下无法转换为整数,因为现在至少有一个NaN值将列转换为floats,请参阅。因此,可能的解决方案是将它们替换为 int,例如-1,然后转换为整数:

注意 - 在新版本的 pandas(0.24.0,即将推出)中,pandas 获得了保存缺失值的整数数据类型(Nullable Integer Data Type)的能力。

import pandas as pd

temp=u'''A
2254
"1,234"
"3,385"
nan
-
-
nan'''
#after testing replace 'pd.compat.StringIO(temp)' to 'data.csv'
df = pd.read_csv(pd.compat.StringIO(temp), 
                 encoding = "ISO-8859-1", 
                 thousands=',', 
                 na_values='-')

print (df)
        A
0  2254.0
1  1234.0
2  3385.0
3     NaN
4     NaN
5     NaN
6     NaN
Run Code Online (Sandbox Code Playgroud)
df['A'] = df['A'].fillna(-1).astype(int)
print (df)
      A
0  2254
1  1234
2  3385
3    -1
4    -1
5    -1
6    -1
Run Code Online (Sandbox Code Playgroud)