使用另一个数据框中的索引创建一个空数据框

Mic*_*hal 53 python indexing pandas

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

    TIME T1  T2 
       1 10 100
       2 20 200
       3 30 300
Run Code Online (Sandbox Code Playgroud)

我想创建一个空的数据框df2以及稍后,添加带有计算结果的新列.

在这一刻,我的代码看起来像这样:

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

     df2=df1.copy()[[]] #copy df1 and erase all columns
Run Code Online (Sandbox Code Playgroud)

...添加两个新列:

     df2["results1"],df2["results2"]=df1["T1"]*df["T2"]*3,df1["T2"]+100
Run Code Online (Sandbox Code Playgroud)

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

Vik*_*kez 79

df2 = pd.DataFrame(index=df1.index)
Run Code Online (Sandbox Code Playgroud)

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

  • 由于这个原因,索引完全是不可变的. (3认同)
  • 当你设置df2.index.name ='test'时,df1的索引也会得到名字. (3认同)
  • 最好将索引设置为df1.index.copy(); 否则,df1和df2将共享相同的索引对象 (2认同)
  • 该错误将在[下一个版本](https://github.com/pydata/pandas/issues/4202)中修复,因此最好在0.13发布之前使用df1.index.copy() (2认同)

wai*_*kuo 11

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

df2 = pd.DataFrame(index=df1.index.copy())
Run Code Online (Sandbox Code Playgroud)

您可以使用df1.indexisdf2.index检查它们是否是同一个对象

  • 不是,您只是制作了一个不必要的索引副本。正是因为这个原因,索引是不可变的——能够在不同的数据结构之间共享它们而不必担心它们会改变。 (12认同)

小智 7

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

df2.index=df1.index