如果pandas dataframe中的单列,则转换类型

时间:2018-03-23 13:41:56

标签: python pandas dataframe

我有一个大约40列的pandas数据帧。我需要将其中一个列的类型更改为float(或numeric),但保持所有其他列不变。

我在本网站上查看的本网站上的所有示例都提供了将整个数据框转换为新类型或单独返回单个新列的方法,这两种方法都不是我想要的。

目前我正在这样做:

df[col] = df[col].astype(float)

但现在这会产生一个来自Pandas的setcopywithwarning。

如何更改单个列的类型;或者将数据框复制到新的数据框,更改过程中一列的类型?

1 个答案:

答案 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