df = pd.read_csv("data.csv", encoding = "ISO-8859-1")
现在,我有一列的值如下:
供参考的样本数据:
现在,我想使用以下代码将列a转换为数字格式:
df[['A']] = df[['A']].astype(int)
这给我一个错误。问题是我将所有三个(南,连字符和逗号)都放在一列中,需要一起解决。有没有更好的方法来转换这些而不替换(nan到-1)之类的东西?
使用参数thousands
和na_values
,但是在缺少值的情况下无法转换为整数,因为现在至少有一个NaN
值转换列为float
,请参见this。所以可能的解决方案是将它们替换为int,例如-1
,然后转换为整数:
注意-在新版本的pandas(即将发布的0.24.0版本中),pandas具有保留具有缺失值的整数dtypes的功能,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
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
也许应该用pd.to_numeric
和errors='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