pandas DataFrame 的一个问题是它需要一些数据来创建其结构。因此,表示无行的情况可能会有问题。
例如,假设我有一个函数返回以字典形式表示的记录列表:get_data() -> list[dict[str, Any]]
并且我想要一个函数返回相同数据的 DataFrame:
def get_dataframe() -> pd.DataFrame:
l = get_data()
df = pd.DataFrame(l)
return df
这种方法效果很好,但 pandas 需要至少一条记录来推断列数和列类型的情况除外len(l)=0
。在这种情况下返回 None 并不好,因为您可能需要在下游编写大量 if/else 语句来处理零记录情况。理想情况下,最好返回一个具有正确列数和列类型的空 DataFrame,这样我们就不必在下游代码中对无记录情况进行特殊处理。但这样做非常繁琐,因为:
- 在 中
get_dataframe()
,我需要指定列数和列类型来创建一个空的 DataFrame,但这些信息已经在其他地方指定了。两次指定相同的内容很繁琐。 - 因为我两次指定了相同的信息,它们可能不一致。所以我需要添加代码来检查一致性。
- 信不信由你,DataFrame 构造函数不接受 dtype 列表。有解决方法可以为每个列指定一个类型,但这不方便。
消除冗余的一个想法是,我不再将原始数据表示为字典列表,而是将其表示为数据类列表,这样我就可以注释每个字段的类型。然后我可以使用注释信息来创建列类型。这也不理想,因为类型注释是可选的,而且 Python 类型的映射dtype
也不是一对一的。
请问没有数据的情况一般是怎么处理的?