gpt4 book ai didi

python - 在 Pandas 中访问错误的列标签时没有引发异常?

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:00 25 4
gpt4 key购买 nike

在某些情况下访问 Pandas 数据框不会引发异常,即使列标签不存在也是如此。

我应该如何检查这些情况,以避免读取错误的结果?

a = pd.DataFrame(np.zeros((5,2)), columns=['la', 'lb'])

a
Out[349]:
la lb
0 0.0 0.0
1 0.0 0.0
2 0.0 0.0
3 0.0 0.0
4 0.0 0.0

a.loc[:, 'lc'] # Raised exception as expected.

a.loc[:, ['la', 'lb', 'lc']] # Not expected.
Out[353]:
la lb lc
0 0.0 0.0 NaN
1 0.0 0.0 NaN
2 0.0 0.0 NaN
3 0.0 0.0 NaN
4 0.0 0.0 NaN

a.loc[:, ['la', 'wrong_lb', 'lc']] # Not expected.
Out[354]:
la wrong_lb lc
0 0.0 NaN NaN
1 0.0 NaN NaN
2 0.0 NaN NaN
3 0.0 NaN NaN
4 0.0 NaN NaN

更新:有一个建议的重复问题 ( Safe label-based selection in DataFrame ),但它是关于行选择的,我的问题是关于列选择的。

最佳答案

看起来因为至少有一个列存在,它返回一个放大的 df 作为重建索引操作。

您可以定义一个用户函数来验证将处理列是否存在的列。在这里,我从传入的 iterable 构造一个 pandas Index 对象并调用 intersection从现有 df 返回公共(public)值并传入 iterable:

In [80]:
def val_cols(cols):
return pd.Index(cols).intersection(a.columns)

a.loc[:, val_cols(['la', 'lb', 'lc'])]

Out[80]:
la lb
0 0.0 0.0
1 0.0 0.0
2 0.0 0.0
3 0.0 0.0
4 0.0 0.0

这也处理完全缺失的列:

In [81]:
a.loc[:, val_cols(['x', 'y'])]

Out[81]:
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 4]

这也处理你的后一种情况:

In [83]:
a.loc[:, val_cols(['la', 'wrong_lb', 'lc'])]

Out[83]:
la
0 0.0
1 0.0
2 0.0
3 0.0
4 0.0

更新

如果您只想测试所有内容是否有效,您可以遍历列表中的每一列并附加 duff 列:

In [93]:
def val_cols(cols):
duff=[]
for col in cols:
try:
a[col]
except KeyError:
duff.append(col)
return duff
invalid = val_cols(['la','x', 'y'])
print(invalid)

['x', 'y']

关于python - 在 Pandas 中访问错误的列标签时没有引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42668806/

25 4 0