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

标签 python python-2.7 pandas logical-operators

我有 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] 返回一个 DataFrame,其中包含 'ID' == 1 的行>,不是 bool 值。由于这会生成一个仅包含您想要的行的框架,因此只需使用 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)

关于python - 如何在for循环中对数据帧执行逻辑运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51412779/

相关文章:

python - 尽管在 .pgpass 中找到了 Postgresql 提示从命令行输入密码

opencv - 模板匹配噪声图像的最佳方法是什么?

python unittest导入类子目录

python - 在python中分组交易描述和计数

python - 属性错误 : module 'pandas' has no attribute 'Dataframe' with rapsberry Pi

python - Pycharm 使用 input() 自动完成

python - 相当于Python中的结构体成员(主要用于文档和阅读代码)

Python:使用相对路径导入excel文件

python-2.7 - 在 Python 中比较两个 CSV 文件

python - 如何根据使用 Pandas 的实际日期查找一年中的天数?