我听从了建议 here更改 pandas 数据框的列数据类型。但是,如果我通过索引号而不是列名引用列,它似乎不起作用。有没有办法正确地做到这一点?
In [49]: df.iloc[:, 4:].astype(int)
Out[49]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5074 entries, 0 to 5073
Data columns (total 3 columns):
5 5074 non-null values
6 5074 non-null values
7 5074 non-null values
dtypes: int64(3)
In [50]: df.iloc[:, 4:] = df.iloc[:, 4:].astype(int)
In [51]: df
Out[51]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5074 entries, 0 to 5073
Data columns (total 7 columns):
1 5074 non-null values
2 5074 non-null values
3 5074 non-null values
4 5074 non-null values
5 5074 non-null values
6 5074 non-null values
7 5074 non-null values
dtypes: object(7)
In [52]:
最佳答案
这样做
In [49]: df = DataFrame([['1','2','3','.4',5,6.,'foo']],columns=list('ABCDEFG'))
In [50]: df
Out[50]:
A B C D E F G
0 1 2 3 .4 5 6 foo
In [51]: df.dtypes
Out[51]:
A object
B object
C object
D object
E int64
F float64
G object
dtype: object
需要逐一分配列
In [52]: for k, v in df.iloc[:,0:4].convert_objects(convert_numeric=True).iteritems():
df[k] = v
....:
In [53]: df.dtypes
Out[53]:
A int64
B int64
C int64
D float64
E int64
F float64
G object
dtype: object
转换对象通常做正确的事情,所以最容易做到这一点
In [54]: df = DataFrame([['1','2','3','.4',5,6.,'foo']],columns=list('ABCDEFG'))
In [55]: df.convert_objects(convert_numeric=True).dtypes
Out[55]:
A int64
B int64
C int64
D float64
E int64
F float64
G object
dtype: object
通过 df.iloc[:,4:]
分配,右侧有一个系列会根据需要复制数据更改类型,所以我认为这在理论上应该可行,但我怀疑这是一个非常隐蔽的错误,它阻止对象 dtype 更改为 real(意思是 int/float)dtype。现在应该加注。
关于python - Pandas :无法更改列数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17778139/