从第二个开始基于NA值覆盖数据帧中的值

2024-04-19 10:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

如果将熊猫数据帧df1定义为:

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

数据帧df2的大小、列名和索引相同,但在某个地方都有NA值

方法A:

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

方法B:

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

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


Tags: 数据方法dataframe定义地方npnanwhere
1条回答
网友
1楼 · 发布于 2024-04-19 10:28:37

这可能与第一个数据帧的数据类型有关,其值需要被覆盖。当数据帧是混合数据类型时,values属性返回一个数据类型升级的数据数组(doc),它看起来是一个副本。因此,对该副本的赋值将丢失。你知道吗

下面是一个“简单”数据帧的示例,其中方法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]})

另一方面,这个看似相似的数据帧只适用于方法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文件中的数据可能会导致数据框中包含混合数据类型。最好使用适当的索引器来更新内容,而不是直接操纵低级值表示。你知道吗

相关问题 更多 >