Python Pandas 创建 DataFrame 并强制设置多种列类型

16 投票
3 回答
9531 浏览
提问于 2025-04-17 23:52

我成功创建了一个数据框,并强制设置了一种数据类型,方法是

import pandas as pd
test = pd.DataFrame({'a':[1,2,3], 'b':[1.1,2.1,3.1]}, dtype=int)

但是我想为每一列指定不同的数据类型。我该怎么做呢?我尝试了以下方法,但结果显示的数据类型都是对象类型,'b'列没有被转换成整数。

test = pd.DataFrame({'a':[1,2,3], 'b':[1.1,2.1,3.1]}, dtype=[('a', int),('b', int)])

Jeff帮我解决了上面的情况。但当我尝试创建一个空的数据框,并希望能够指定列的数据类型时,我发现了另一个问题。对于所有列使用相同的数据类型,我可以这样做

test = pd.DataFrame(columns=['a','b'], dtype=int)

如果我想为'a'和'b'分别指定数据类型呢?

3 个回答

3

是的,问得很好。你可以在创建数据框的时候指定一个共同的数据类型,或者添加一些空的 numpy 数组,虽然它们的数据类型可能不同。不过,根据我的经验,pandas 通常会根据你添加的数据来推断整个数据框的数据类型。我觉得在你把数据添加到数据框之后,再为不同的列指定数据类型会更好。

convert_dict = {'a': int, 'b': float}
df = df.astype(convert_dict)
3

你可以传入一个包含 numpy 数组的字典,并指定每个数组的数据类型 dtype; 这样可以创建既有内容的数组,也可以创建空数组。(这个回答稍微改编自我在这里的回答。)

这是一个空数组:

df = pd.DataFrame(data={'a' : np.array([], dtype=int),
                        'b' : np.array([], dtype=float)
                       }
                 )

这是一个填充好的数组:

df = pd.DataFrame(data={'a' : np.array([1,2,3], dtype=int),
                        'b' : np.array([4,5,6], dtype=float)
                       }
                 )

而且你可以为 dtype 使用几乎任何类型,比如 objectstrdatetime.datetime 或者你自己定义的 CrazyClassYouDefined。不过要注意,如果 pandas 不特别支持某种类型(比如 str),它会把那一列当作 object 来处理。不过别担心,其他一切应该还是能正常工作。

7

你可以传入一个带有数据类型参数的序列。

In [15]: pd.DataFrame({'a':[1,2,3], 'b':[1.1,2.1,3.1]}).dtypes
Out[15]: 
a      int64
b    float64
dtype: object

In [16]: pd.DataFrame({'a':Series([1,2,3],dtype='int32'), 'b':Series([1.1,2.1,3.1],dtype='float32')}).dtypes
Out[16]: 
a      int32
b    float32
dtype: object

撰写回答