我正在尝试将以下函数应用于数据框并仅返回符合条件的行,但会获得KeyError。我做错了什么?
N = 100
np.random.seed(0)
df = pd.DataFrame(
{'X':np.random.uniform(-3,10,N),
'Y':np.random.uniform(-3,10,N),
'Z':np.random.uniform(-3,10,N),
})
def func_sec(df):
for i in range(len(df)):
for k in range( i+1, len(df)+1 ):
df_sum = df[i:k].sum()
m = (df_sum>2).all() & (df_sum.sum()>10)
return df[m]
func_sec(df)
答案 0 :(得分:1)
对于数据框df
,您可以按列选择,例如在你的情况下'X':
df['X']
或切片行
df[0:10]
如果您尝试使用df[0]
或df[True]
之类的无效内容,则会出现关键错误。
答案 1 :(得分:1)
与其他人一样,由于df [m],关键错误被抛弃。您的列名不是布尔值,它们是'X','Y','Z'。在the pandas documentation底部的某处有一些关于布尔索引的信息,所以我建议你查看它。
长话短说,你做不到df[True]
,但你可以做df[df['X'] > 10]
本身。