首页 > 解决方案 > 如何在 Pandas 中创建仅包含 Nones 但具有特定类型的列?

问题描述

我正在为单元测试创​​建一个表。在一种情况下,我想测试如果一列中的所有值都是 Null,但类型正确,会发生什么。如果我创建一个这样的测试表:

df0 = pandas.DataFrame(
        columns=["a", "b", "key"],
        data=[{"a": 4, "b": 5, "key": 1}, {"a": 3, "b": 9, "key": 2}],
    )

...然后列b的类型默认为object,只是因为没有信息让 pandas 知道它应该是哪种列。

有没有我可以用来告诉 Pandas 列的类型应该是什么类型的语法?根据文档,这样的事情应该可以工作:

df1 = pandas.DataFrame(
        columns=["a", "b", "key"],
        data=[{"a": 7, "b": None, "key": 3}, {"a": 7, "b": None, "key": 1}],
        dtype={"b":int}
    )

不幸的是,这给出了一个错误:

TypeError: object of type 'type' has no len()

那么正确的方法是什么?理想情况下,我想在一个语句中完成,但是创建表然后设置类型是可以的。

更新0:

感谢@anky的建议,我尝试了这个:

df1 = pandas.DataFrame(
        columns=["a", "b", "key"],
        data=[{"a": 7, "b": None, "key": 3}, {"a": 7, "b": None, "key": 1}]
    ).astype(dtype={"b":numpy.int64})

但我得到这个错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

更新 1

这种基于@Aditya K 建议的语法也不太正确:

df1 = pandas.DataFrame(
        columns=["a", "b", "key"],
        data=[{"a": 7, "b": None, "key": 3}, {"a": 7, "b": None, "key": 1}],
        dtype={"b":numpy.int64}
    )

给出这个错误:

TypeError: object of type 'type' has no len()

解决方案

感谢@Anky 提供此解决方案:

df1 = pandas.DataFrame(
        columns=["a", "b", "key"],
        data=[{"a": 7, "b": None, "key": 3}, {"a": 7, "b": None, "key": 1}],
    ).astype({"b":"Int64"})

这给出了所需的列类型:

在此处输入图像描述

标签: pandas

解决方案


推荐阅读