我有一个大约40列的pandas数据帧。我需要将其中一个列的类型更改为float(或numeric),但保持所有其他列不变。
我在本网站上查看的本网站上的所有示例都提供了将整个数据框转换为新类型或单独返回单个新列的方法,这两种方法都不是我想要的。
目前我正在这样做:
df[col] = df[col].astype(float)
但现在这会产生一个来自Pandas的setcopywithwarning。
如何更改单个列的类型;或者将数据框复制到新的数据框,更改过程中一列的类型?
答案 0 :(得分:0)
pd.DataFrame.astype()
的文档字符串包含以下内容:
Signature: df.astype(dtype, copy=True, errors='raise', **kwargs)
Docstring:
Cast a pandas object to a specified dtype ``dtype``.
Parameters
----------
dtype : data type, or dict of column name -> data type
Use a numpy.dtype or Python type to cast entire pandas object to
the same type. Alternatively, use {col: dtype, ...}, where col is a
column label and dtype is a numpy.dtype or Python type to cast one
or more of the DataFrame's columns to column-specific types.
所以你只需要将dict
传递给包含列的方法和你想要的相应的新dtype
;下面提供的示例包含通用数据,用于更改3列中2列中的dtype
。
import numpy as np
import pandas as pd
df = pd.DataFrame(2*np.random.randn(5,3), columns=['a', 'b', 'c'])
# df is shown below
a b c
0 0.104505 2.20864 -0.835571
1 -0.136716 1.94572 -0.640713
2 0.558393 1.47761 3.46805
3 1.57529 1.63724 -2.32679
4 -0.0480981 1.70924 1.79345
df.astype(dict(a=int, c=bool))
# returns the following
a b c
0 0 2.20864 True
1 0 1.94572 True
2 0 1.47761 True
3 1 1.63724 True
4 0 1.70924 True