Pandas DataFrame将多个类型转换为列

17 投票
2 回答
13699 浏览
提问于 2025-04-18 08:18

我想在创建一个pandas的DataFrame时,为每一列指定不同的数据类型:

frame = pandas.DataFrame({..some data..},dtype=[str,int,int])

这样做可以,如果数据类型只有一种(比如 dtype=float),但如果像上面那样有多种类型,就不行了——有没有办法做到这一点呢?

常见的解决办法似乎是稍后再转换数据类型:

frame['some column'] = frame['some column'].astype(float)

但这样做有几个问题:

  1. 看起来很麻烦
  2. 似乎还涉及到不必要的复制操作——在处理大数据集时,这可能会很耗费资源。

2 个回答

8

你还可以创建一个带有特定数据类型的NumPy数组,然后把它转换成DataFrame。

data = np.zeros((2,),dtype=[('A', 'i4'),('B', 'f4'),('C', 'a10')])
data[:] = [(1,2.,'Hello'),(2,3.,"World")]
DataFrame(data)

可以查看 从结构化或记录数组 了解更多信息。

8

另外,你可以通过先创建 Series 对象来为每一列指定 dtype(数据类型)。

In [2]: df = pd.DataFrame({'x': pd.Series(['1.0', '2.0', '3.0'], dtype=float), 'y': pd.Series(['1', '2', '3'], dtype=int)})

In [3]: df
Out[3]: 
   x  y
0  1  1
1  2  2
2  3  3

[3 rows x 2 columns]

In [4]: df.dtypes
Out[4]: 
x    float64
y      int64
dtype: object

撰写回答