You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将循环中print(row)的结果转换为指定格式的Pandas DataFrame?

解决方案

你可以通过两种方式实现将符合条件的行转换为指定格式的DataFrame,以下是具体步骤:

方法1:直接收集符合条件的行

在代码开头初始化一个空列表用于存储符合条件的行,然后在触发print(row)的位置将行数据加入该列表,最后将列表转换为DataFrame并筛选所需列:

import pandas as pd
import numpy as np

# 初始化存储符合条件行的列表
warn_rows = []
euclid_data = []
day_night_data = []
euclid_track = []
means = []
warn = []

for i, row in df_all.iterrows():
    mylist = row.euclidian_distance
    euclid_data.append(mylist)
    mylist1 = row.day_night
    day_night_data.append(mylist1)

    if len(euclid_data) == 120:
        xbar = np.mean(euclid_data)
        dn = np.mean(day_night_data) 

        if dn <= 0.5 and xbar >= day_thresh:
            euclid_track.append(0.0)
        elif dn > 0.5 and xbar >= night_thresh:
            euclid_track.append(0.0)
        else:
            euclid_track.append(xbar)
            
        means.append(np.mean(euclid_data))

        if len(euclid_track) >= 3 and sum(euclid_track[-3:]) == 0:
            # 将符合条件的行加入列表(可保留原print语句)
            warn_rows.append(row)
            warn.append(i)

        if len(warn) >= 100:
           break

# 将收集到的行转换为DataFrame,并筛选指定列
result_df = pd.DataFrame(warn_rows)[['id', 'date_time', 'euclidian_distance']]
# 可选:重置索引,避免原行索引干扰
result_df = result_df.reset_index(drop=True)

方法2:利用已存储的索引筛选(更高效)

因为你已经将符合条件的行索引存入warn列表,循环结束后可以直接通过索引从原DataFrame中提取目标列,这种方式更符合Pandas的高效操作逻辑:

# 循环结束后执行以下代码
result_df = df_all.loc[warn, ['id', 'date_time', 'euclidian_distance']].reset_index(drop=True)

注意事项

  • 确保原DataFramedf_all中确实包含id、date_time、euclidian_distance这三列,否则会抛出列不存在的错误。
  • 若原DataFrame的行索引不是连续整数,方法2依然可以正常工作,因为warn中存储的是对应行的原始索引值。

内容的提问来源于stack exchange,提问作者user7446890

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:25:33