【问题标题】:accessing pandas columns with loc and square brackets comparison element wise使用 loc 和方括号比较元素明智地访问 pandas 列
【发布时间】:2020-04-14 04:41:08
【问题描述】:

在一个特定的数据框中,我有一个名为“Wind”的列,它提供了德国每年的风能产量。 在序列开始时,产生式非常小,以至于在 DF 中写入 NaN,没有可用数据。我只有从 2010 年开始的风数据。

用于复制和粘贴的数据链接: API_link_to_data='https://raw.githubusercontent.com/jenfly/opsd/master/opsd_germany_daily.csv'

energyDF = pd.read_csv(API_link_to_data)

现在下面的代码会比较两列元素:

energyDF.loc[:,'Wind'] == energyDF['Wind']

我希望结果是 [True, True, True,....,True]

但事实并非如此。 对于 NaN 值,结果为 False。

好吧,所有 NaN 值的结果都是错误的,即使元素方面它们是相同的:

print(wind_col1[0])
print(wind_col2[0])
print(wind_col1[0] == wind_col2[0])
print(wind_col1[0] == np.nan)
print(wind_col2[0] == np.nan)

结果: 楠 楠 错误的 错误的 假的

预期: 楠 楠 真的 真的 是的

在对整个框架做完之后:

energyDF=energyDF.fillna(0)

然后

energyDF.loc[:,'Wind'] == energyDF['Wind']

是一个完整的列表。

谁能解释一下?

谢谢

【问题讨论】:

  • 这是意料之中的。 NaNs 不等于任何东西。 Imo 最好的方法是用数据框中不存在的值填充na,然后检查相等性
  • wooooohhh 不知道 nan 不等于任何东西。
  • @AsishM。提出一个解决方案,我会投赞成票。

标签: python pandas numpy boolean nan


【解决方案1】:

NaNs 不等于自己。见:Why is NaN not equal to NaN?

关于检查energyDF.loc[:,'Wind'] == energyDF['Wind']的相等性

您可以在fillna 双方都指定一个值(最好是该系列中没有出现的值),然后检查两者是否确实相同

举个例子:

>>> df
    ID Col1
0  1.0   AD
1  NaN   BC
2  3.0   CE
>>> (df.loc[:, 'ID'] == df['ID']).all()
False
>>> (df.loc[:, 'ID'].fillna("Non-existent") == df['ID'].fillna("Non-existent")).all()
True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2018-07-02
    • 2020-03-11
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多