使用 loc 和方括号比较元素明智地访问 pandas 列
accessing pandas columns with loc and square brackets comparison element wise
在一个特定的数据框中,我有一个名为 "Wind" 的列,它提供了德国每年的风能发电量。
在序列的开头,产生式非常小,在 DF 中写为 NaN,没有可用数据。只有从 2010 年开始,我才有风的数据。
DATA link 用于复制和粘贴:
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']
是一个充满真值的列表。
有人可以解释一下吗?
谢谢
NaN
不等于他们自己。参见: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
在一个特定的数据框中,我有一个名为 "Wind" 的列,它提供了德国每年的风能发电量。 在序列的开头,产生式非常小,在 DF 中写为 NaN,没有可用数据。只有从 2010 年开始,我才有风的数据。
DATA link 用于复制和粘贴: 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']
是一个充满真值的列表。
有人可以解释一下吗?
谢谢
NaN
不等于他们自己。参见: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