使用来自另一个数据帧的索引创建一个空数据帧

Posted

技术标签:

【中文标题】使用来自另一个数据帧的索引创建一个空数据帧【英文标题】:Create an empty data frame with index from another data frame 【发布时间】:2013-08-13 04:06:06 【问题描述】:

我有一个包含多列和多行的数据框 df1。简单例子:

    TIME T1  T2 
       1 10 100
       2 20 200
       3 30 300

我想创建一个空的数据框df2,然后添加新的列和计算结果。

此时,我的代码如下所示:

     df1=pd.read_csv("1.txt",index_col="TIME")

     df2=df1.copy()[[]] #copy df1 and erase all columns

...添加两个新列:

     df2["results1"],df2["results2"]=df1["T1"]*df["T2"]*3,df1["T2"]+100

有没有更好/更安全/更快的方法来做到这一点? 是否可以创建一个空数据框 df2 并且只从 df1 复制索引?

【问题讨论】:

我喜欢你原来的建议,除了你不必复制和擦除整个数据框:df2=df1[[]].copy() #empty slice,然后复制 【参考方案1】:

为了避免在 concat 之后得到所有的NaN,请为其添加索引。

df1 = pd.DataFrame(x1.toarray(),index=simpledf.index, columns=v.get_feature_names())

当定义带有X 转换的新数据帧时,使用与原始数据帧相同的索引。

【讨论】:

【参考方案2】:

你可以使用这个短代码:

df2=df1[[]].copy()

【讨论】:

【参考方案3】:

您也可以将一个数据帧的索引直接分配给另一个数据帧。

df2.index=df1.index

【讨论】:

索引的长度必须匹配,否则你会得到一个ValueError for Length mismatch【参考方案4】:

最好将index设置为df1.index.copy()

df2 = pd.DataFrame(index=df1.index.copy())

你可以使用df1.indexdf2.index来检查它们是否是同一个对象

【讨论】:

不是,您只是制作了一份不必要的索引副本。正是因为这个原因,索引是不可变的——能够在不同的数据结构之间共享它们,而不必担心它们会改变。【参考方案5】:
df2 = pd.DataFrame(index=df1.index)

这将创建一个没有列但只有一个索引的 DataFrame,它将与 df1 中的索引相同。

【讨论】:

最好将索引设置为 df1.index.copy();否则,df1 和 df2 将共享同一个索引对象 索引是不可变的正是因为这个原因。 当你设置 df2.index.name = 'test' 时,df1 的索引也会得到名字。 这个bug会在next version修复,所以最好在0.13发布之前使用df1.index.copy()

以上是关于使用来自另一个数据帧的索引创建一个空数据帧的主要内容,如果未能解决你的问题,请参考以下文章

使用来自另一个数据帧的代码重新索引数据帧

Pyspark - 如何将多个数据帧的列连接成一个数据帧的列

合并具有不同索引的两个数据帧,同时使用一行代码保留主数据帧的索引

两个数据帧的数组列的平均值并在pyspark中找到最大索引

重新索引 MultiIndex 数据帧的特定级别

使用来自另一个数据帧的值更新数据帧标头