有一件事我发现自己必须经常去做,这让我很惊讶,在熊猫身上做到这一点是多么的困难。假设我需要创建一个具有指定索引类型和名称、列类型和名称的空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中有可能吗?如果不是的话,开发人员是否正在考虑支持这样的项目?我觉得它真的应该像这样简单(上面的语法)。
还可以通过替换数据帧列来设置其数据类型:
你可以通过使用列表理解来简化一些事情
这实际上与您已经做的没有太大的不同,但是不必修改代码中的多个位置,就可以更容易地创建任意数据帧。
不幸的是,
DateFrame
ctor接受一个dtype
描述符,但是您可以使用read_csv
进行一些欺骗:因此您可以看到数据类型是按需的,并且索引是按需设置的:
相关问题 更多 >
编程相关推荐