python - Pandas :无法更改列数据类型

标签 python pandas

我听从了建议 here更改 pandas 数据框的列数据类型。但是,如果我通过索引号而不是列名引用列,它似乎不起作用。有没有办法正确地做到这一点?

In [49]: df.iloc[:, 4:].astype(int)
Out[49]: 
&ltclass 'pandas.core.frame.DataFrame'&gt
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]: 
&ltclass 'pandas.core.frame.DataFrame'&gt
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。现在应该加注。

这是要跟踪的问题:https://github.com/pydata/pandas/issues/4312

关于python - Pandas :无法更改列数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17778139/

相关文章:

python - 以柱状格式打印数据的最佳方式?

python - 如何使用Multiindex聚合到pandas列表中?

python - Pandas 如何将数组放在单个数据框单元格中?

python - Holoviews 表不直观地保留索引

pandas - 使用 apply 方法将 Python Pandas 数据帧列中的元组列表转换为列表字典

python - 另存为 csv 会损坏数据帧

python - 安装适用于 Python 的 GDAL

python - 属性错误: 'list' object has no attribute 'strip' yagmail and csv

javascript - 为什么我不能在 JavaScript 中做 array[-1]?

python - 如何使用 Pandas 将 Series 连接到 DataFrame 上?