如何在for循环中对数据帧执行逻辑运算



我有4个数据帧,所有数据帧都有一列连接它们的ID

我使用这行代码将所有4个合并为一个df:

frame = [df1, df2, df3, df4]
df_final = reduce(lambda left,right: pd.merge(left,right,on='ID'), frame)

现在我想循环通过df_final,但仅限于ID等于1的情况,并将出现的行插入API。

我创建了这个代码来尝试:

for i in df_final:
if df_final.loc[df_final['ID'] == 1]:
df_final_1 = df_final.loc[df_final['SID'] == 1]
data = {
'token': 'xxx',
'number':  df_final_1.number,
'ID':df_final_1.ID + df_final.ID2,
'link':df_final_1.URL,
}
r = requests.post(url,headers=headers,params=data)
else:
print('fail')

我不断收到错误:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我知道这与循环中的这些代码行有关,但不确定是什么:

if df_final.loc[df_final['ID'] == 1]:
df_final_1 = df_final.loc[df_final['ID'] == 1]

理想情况下,我不想创建另一个数据帧来保存我试图从df_final中子集的值

df_final.loc[df_final['ID'] == 1]返回包含'ID' == 1所在行的DataFrame,而不是布尔值。由于这只会生成一个只包含您想要的行的帧,所以只需使用itertuples():对其进行迭代即可

for row in df_final[df_final['ID'] == 1].itertuples():
data = {
'token': 'xxx',
'number':  row.number,
'ID':row.ID + row.ID2,
'link':row.URL,
}
r = requests.post(url,headers=headers,params=data)

相关内容

  • 没有找到相关文章

最新更新