遍历DataFrame列:针对给定两个DataFrame的技术实现问询
遍历DataFrame列的实用方案(适配你的两个DataFrame)
嘿,针对你给出的这两个结构完全一致的DataFrame(df1和df2),我整理了几种常用的列遍历实现方案,覆盖不同的操作场景,你可以按需选用:
1. 仅遍历列名(快速获取列清单)
如果只是想查看或批量处理列名称,直接迭代DataFrame的columns属性就够了:
# 遍历df1的所有列名 for col in df1.columns: print(f"当前处理列: {col}")
运行后会依次输出WEEK、DIM1、DIM2、T1、T2这些列名。
2. 遍历列的完整数据(操作每列的Series)
要是需要对每一列的实际数据做处理,比如统计、清洗,可以用items()方法同时获取列名和对应的数据Series:
# 遍历df1的每一列,输出列名和对应数据 for col_name, col_data in df1.items(): print(f"=== 列: {col_name} ===") print(col_data) print("---")
比如针对T1列,会输出该列的所有行数据及数据类型,非常适合单列的批量操作。
3. 同时遍历两个DataFrame的对应列(对比/合并场景)
因为你的df1和df2结构完全匹配,很多时候需要同时处理对应列(比如对比数值差异、校验维度一致性),用zip()就能轻松配对两个df的列:
3.1 对比数值列的差异(比如T1/T2)
如果要计算两个df中T1、T2列的差值,代码可以这么写:
# 同时遍历两个df的对应列,计算数值列差值 for (col1_name, col1_data), (col2_name, col2_data) in zip(df1.items(), df2.items()): # 只处理*数值型列*T1和T2 if col1_name in ["T1", "T2"]: diff_series = col1_data - col2_data print(f"列 {col1_name} 的差值结果:") print(diff_series) print("---")
针对你的数据,T1列的差值会是-5、90、-100,清晰展示每一行的差异。
3.2 校验维度列的一致性(比如WEEK/DIM1)
如果要检查两个df的维度列(比如WEEK、DIM1)是否完全匹配,避免数据错位:
# 遍历指定维度列,校验匹配性 for col_name in ["WEEK", "DIM1", "DIM2"]: if df1[col_name].equals(df2[col_name]): print(f"✅ 列 {col_name} 的所有行数据完全匹配") else: # 找出不匹配的行 mismatch_rows = df1[df1[col_name] != df2[col_name]] print(f"❌ 列 {col_name} 存在不匹配行:") print(mismatch_rows)
运行后会发现DIM2列第三行的PQR和XYZ不匹配,其他维度列完全一致。
4. 进阶:用apply批量处理列
如果要对所有列执行相同的函数(比如统计非空值、计算均值),用apply()指定axis=0即可按列批量操作:
# 计算每一列的非空值数量 non_null_stats = df1.apply(lambda col: col.count(), axis=0) print("各列非空值统计:") print(non_null_stats)
输出会显示DIM2列只有2个非空值(因为第一行是NULL),其他列都是3个。
内容的提问来源于stack exchange,提问作者Dark Shadows
相关产品推荐
相关产品推荐

