我发现自己经常需要做一件事,在Pandas中实现这个功能非常困难。假设我需要创建一个指定索引类型和名称以及列类型和名称的空的DataFrame
。(例如,我可能想在稍后填充它,比如在循环中)。我发现最简单的方法是为每个列创建一个空的pandas.Series
对象,指定其dtype
,将它们放入一个字典中,并将该字典传递到DataFrame
构造函数中。具体步骤如下:
def create_empty_dataframe():
index = pandas.Index([], name="id", dtype=int)
column_names = ["name", "score", "height", "weight"]
series = [pandas.Series(dtype=str), pandas.Series(dtype=int), pandas.Series(dtype=float), pandas.Series(dtype=float)]
columns = dict(zip(column_names, series))
return pandas.DataFrame(columns, index=index, columns=column_names)
# The columns=column_names is required because the dictionary will in general put the columns in arbitrary order.
第一个问题:上面的方法真的是最简单的方法吗?这样做有很多复杂的地方。我真正想做的,也相信很多人真正想做的,是像下面这样做。
df = pandas.DataFrame(columns=["id", "name", "score", "height", "weight"], dtypes=[int, str, int, float, float], index_column="id")
第二个问题。 Pandas中是否可能使用这种语法?如果不行,开发人员是否考虑支持类似的语法?对我来说,它真的应该像上面的语法一样简单。
read_csv
是最简单的方法,与标准的DataFrame
构造函数相比具有更高的灵活性,除了你有意读取一个空文件之外,这并不算作弊。 - EdChum