如何将循环中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)
注意事项
- 确保原DataFrame
df_all中确实包含id、date_time、euclidian_distance这三列,否则会抛出列不存在的错误。 - 若原DataFrame的行索引不是连续整数,方法2依然可以正常工作,因为
warn中存储的是对应行的原始索引值。
内容的提问来源于stack exchange,提问作者user7446890
相关产品推荐
相关产品推荐

