【问题标题】:How to replace a Dataframe with another dataframe?如何用另一个数据框替换一个数据框?
【发布时间】:2021-02-18 13:34:52
【问题描述】:

我传入一个数据框来执行各种其他数据清理过程。这样做时,如果没有另一个数据框,我将无法完成其中一个过程。

data= {'ID':[1,2], '2020-11-01' :[10,15], '2020-11-02':[43,35]}
df1 = pd.DataFrame.from_dict(data)
df1.head()


    ID  2020-11-01  2020-11-02
0   1   10  43
1   2   15  35

我需要将这些日期转换为行,以便使用融化

df2 = df1.melt(id_vars = ["ID"], var_name = "ReportDate", value_name= "Units")
df2.head()

    ID  ReportDate  Units
0   1   2020-11-01  10
1   2   2020-11-01  15
2   1   2020-11-02  43
3   2   2020-11-02  35

现在我需要从 df1 中删除所有内容,并需要将 df2 的详细信息捕获到 df1。

我尝试从 df1 中删除所有列(使用 inplace=True),然后这样做

df1["ID"] = df2["ID"]
df1["ReportDate"] = df2["ReportDate"]
df1["Units] = df2[Units]
df1.head()

    ID  ReportDate  Units
0   1   2020-11-01  10
1   2   2020-11-01  15

但我最终只有 2 行,因为 df1 的先前形状是 2x3

我需要我的输出看起来像

df1.head()

    ID  ReportDate  Units
0   1   2020-11-01  10
1   2   2020-11-01  15
2   1   2020-11-02  43
3   2   2020-11-02  35

如何让 df1 拥有 df2 的所有内容?

【问题讨论】:

  • 你最终的 df1 应该是什么样的?在显示早期阶段时,请像调用 f1.head() 一样显示。
  • 为什么df1 = df2 不能满足您的要求?或import copy df1 = copy.deepcopy(df2)
  • @noah 我已经更新了 head 以及我的结果应该是什么样子
  • @piterbarg 因为这不会更新现有的 df1,它会创建一个新的数据框对象并且无法传递我的课程。我使用 inplace=true 对一个数据帧进行了所有更改,我还没有完成复制部分,让我试试
  • 我明白了。这似乎是一个相关的讨论stackoverflow.com/questions/39783570/…

标签: python-3.x pandas dataframe replace


【解决方案1】:

我了解目标是将df2 的内容分配给df1,同时确保id(df1) 不会通过此操作更改。这似乎可以做到,但可能不是最优雅的方式。与您尝试的主要区别是删除索引和列

df1.drop(df1.columns, axis=1, inplace=True)
df1.drop(df1.index,  inplace=True)
df1[df2.columns] = df2[df2.columns]
df1.head()

拥有一个可以这样使用的函数process_data 可能会更好

df1 = process_data(df1)

那么 df1 可以在你的函数内部改变,但是当从函数返回时它被分配给同一个变量

【讨论】:

  • 谢谢,我不知道我也可以删除索引,谢谢。我会尝试在现有设计中加入一个功能。
猜你喜欢
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 2023-04-03
相关资源
最近更新 更多