【问题标题】: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,然后复制

标签: python indexing pandas


【解决方案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()
      猜你喜欢
      • 2022-01-21
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多