gpt4 book ai didi

python - 根据第二个数据框中的 NA 值覆盖 pandas 数据框中的值

转载 作者:太空宇宙 更新时间:2023-11-03 11:48:21 24 4
gpt4 key购买 nike

如果我有一个 pandas 数据框 df1 定义为:

df1 = pd.DataFrame({'a': [ 1, 2], 'b': [3, 4]})

还有一个大小相同、列名和索引相同但具有 NA 值的数据框 df2

方法A:

nan_locations = np.where(df2.isnull())
df1.values[nan_locations] = np.nan

方法B:

df1[df2.isnull()] = np.nan

用来自 df2 中相同位置的 NA 覆盖 df1 中的值。但是,如果我对从 Excel 文件读取的数据框执行相同操作,则方法 A 并不总是有效。有人可以解释一下为什么会这样吗?

最佳答案

这可能与第一个 DataFrame 的数据类型有关,其值需要被覆盖。当 DataFrame 是混合数据类型时,values 属性返回一个带有向上转换数据类型(doc)的 ndarray,这似乎是一个副本。因此,对该副本的分配将丢失。

这是一个“简单”DataFrame 的示例,其中方法 A 和 B 都有效:

df1 = pd.DataFrame({'a': [1.0, 2.0], 'b': [3.0, 4.0]})
df2 = pd.DataFrame({'a': [1.0, 2.0], 'b': [np.nan, 4.0]})

另一方面,这个看似相似的DataFrame只适用于方法B:

df1 = pd.DataFrame({'a': [1, 2], 'b': [3.0, 4.0]})
df2 = pd.DataFrame({'a': [1, 2], 'b': [np.nan, 4.0]})

因为 df1 的数据类型是:

a      int64
b float64

因此,您的 Excel 文件中的数据可能会导致具有混合数据类型的 DataFrame。使用适当的索引器来更新内容应该优先于直接操作低级值表示。

关于python - 根据第二个数据框中的 NA 值覆盖 pandas 数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com