【问题标题】:Pandas update doesn't do anything熊猫更新没有做任何事情
【发布时间】:2019-07-08 11:11:47
【问题描述】:

我有一个包含一些信息的数据框。我创建了另一个更大的数据框,其中包含默认值。我想用第一个数据帧中的值更新默认数据帧。我正在使用 df.update 但什么也没发生。代码如下:

new_df = pd.DataFrame(index=range(25))
new_df['Column1'] = 1
new_df['Column2'] = 2
new_df.update(old_df)

这里,old_df 有 2 行,索引 5,6,在 Column1 和 Column2 中有一些随机值,仅此而已。我希望这些行会覆盖 new_df 中的默认值,我做错了什么?

【问题讨论】:

  • 你能发布 old_df 吗?如果您希望返回任何内容,则它不会返回任何内容,因为 update 是一个就地操作并且它返回 None。更新后你检查 new_df 了吗?
  • 确保列名相同

标签: python pandas


【解决方案1】:

这对我有用,所以我认为问题出在您没有向我们展示的代码部分。

import pandas as pd
import numpy as np

new_df = pd.DataFrame(index=range(25))

old_df = pd.DataFrame(index=[5,6])

new_df['Column1'] = 1
new_df['Column2'] = 2

old_df['Column1'] = np.nan
old_df['Column2'] = np.nan
old_df.loc[5,'Column1'] = 9
old_df.loc[6,'Column2'] = 7
new_df.update(old_df)

print(new_df.head(10))

输出:

   Column1  Column2
0      1.0      2.0
1      1.0      2.0
2      1.0      2.0
3      1.0      2.0
4      1.0      2.0
5      9.0      2.0
6      1.0      7.0
7      1.0      2.0
8      1.0      2.0
9      1.0      2.0

【讨论】:

  • 就逻辑而言,代码是相同的。不同之处在于数据帧的内容。我看不出这有什么不同,但是当我检查两个数据框的列名时,它会为所有列名返回 True。除此之外,重叠的 df 与其他 df 共享一些索引,因此这些值应该简单地覆盖其他值。
  • 好吧,我发布的代码对你有用吗?您能否重新创建一个简单的示例,类似于我的,但使用您的数据,这对您不起作用?
【解决方案2】:

由于您没有向我们提供如何构造/获取 old_df,因此在更新之前,请确保两个索引的类型相同。

new_df.index = new_df.index.astype('int64')
old_df.index = old_df.index.astype('int64')

一个 int 不等于一个 string 1 != '1'。所以 update() 没有在你的数据框中找到常见的行,并且无事可做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 2016-10-02
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多