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


74

我有一个具有多个列和行的数据框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,然后复制
Elias Hasle

Answers:


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

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


3
最好将索引设置为df1.index.copy(); 否则,df1和df2将共享相同的索引对象
Waiting Kuo 2013年

7
正是由于这个原因,索引是不可变的。
维克多·柯基兹

3
设置df2.index.name ='test'时,df1的索引也将获得名称。
Waitingkuo

2
该错误将在下一版本中修复,因此最好在发布0.13之前使用df1.index.copy()
Waitkuo

9

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

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

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


12
不是,您只是制作了不必要的索引副本。正是由于这个原因,索引是不变的-能够在不同的数据结构之间共享索引,而不必担心它们会改变。
维克多·柯基兹



0

为了避免NaN在concat之后获取所有内容,请向其中添加索引。

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

在定义X转换后的新数据框时,请使用与原始数据框相同的索引。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.