使用以下程序选择 DataFrame 中 'Num' 中包含 numbers 的行。
import pandas as pd
data = {'Num': [[1,2,100], [10,20,30], [1,2,30],[1,2,200],[4,0,9]],'Id':range(5)}
df = pd.DataFrame(data)
numbers = [1,2]
filtered_df = df.loc[all(n in df['Num'] for n in numbers)]
print(filtered_df)
我有以下错误:
raise KeyError(KeyError: 'True: boolean label can not be used without a boolean index'
我不明白这个错误的原因,因为如果我将 filtered_df 更改为:
filtered_df = df.loc[df['Num'].apply(lambda c : all(n in c for n in numbers))]
该程序运行良好。您能解释一下错误以及如何纠正第一个程序吗?
all(n in df['Num'] for n in numbers)
将检查 numbers
中的所有数字是否都在 df['Num']
的 index中,并输出单个
True
。然后尝试用它来索引,相当于 df.loc[True]
,这是没有意义的,因为你的索引中没有 True
。