Pandas DataFrame将多个类型转换为列
我想在创建一个pandas的DataFrame时,为每一列指定不同的数据类型:
frame = pandas.DataFrame({..some data..},dtype=[str,int,int])
这样做可以,如果数据类型只有一种(比如 dtype=float
),但如果像上面那样有多种类型,就不行了——有没有办法做到这一点呢?
常见的解决办法似乎是稍后再转换数据类型:
frame['some column'] = frame['some column'].astype(float)
但这样做有几个问题:
- 看起来很麻烦
- 似乎还涉及到不必要的复制操作——在处理大数据集时,这可能会很耗费资源。
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