在熊猫数据框中转换包含nan,hypen和逗号的列的数据类型

时间:2019-01-15 07:47:12

标签: python pandas

df = pd.read_csv("data.csv", encoding = "ISO-8859-1")

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

供参考的样本数据:

enter image description here

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

df[['A']] = df[['A']].astype(int)

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

2 个答案:

答案 0 :(得分:4)

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

通知-在新版本的pandas(即将发布的0.24.0版)中,pandas具有保留具有缺失值Nullable Integer Data Type的整数dtypes的功能。

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

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

答案 1 :(得分:0)

也许应该对pd.to_numericerrors='coerce'str.replace

df['A'] = pd.to_numeric(df['A'].str.replace(',',''),errors='coerce')

现在:

print(df['A'])

是:

0    2254.0
1    1234.0
2    3385.0
3       NaN
4       NaN
5       NaN
6       NaN
Name: A, dtype: float64