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

Python遍历CSV数组异常:无法循环所有行的问题解决

修复CSV数据展开处理的Python代码问题

原始CSV数据

number,event_date,event_timestamp,event_name,event_params
0,20220315,1668314165054758,eventTracking1,"[{'key': 'test0', 'value': {'string_value': None1, 'int_value': 1662354225, 'float_value': None, 'double_value': None}}
 {'key': 'test2', 'value': {'string_value': 'http:\test1.com', 'int_value': None, 'float_value': None, 'double_value': None}}
 {'key': 'test3', 'value': {'string_value': 'A@gmail.com', 'int_value': None, 'float_value': None, 'double_value': None}}]"
1,20220325,1668445654758556,eventTracking2,"[{'key': 'test5', 'value': {'string_value': None3, 'int_value': 16658884225, 'float_value': None, 'double_value': None}}
 {'key': 'test7', 'value': {'string_value': 'http:\test2.com', 'int_value': None, 'float_value': None, 'double_value': None}}
 {'key': 'test8', 'value': {'string_value': 'A@gmail.com', 'int_value': None, 'float_value': None, 'double_value': None}}]"
2,20220335,1668317775054758,eventTracking3,"[{'key': 'test10', 'value': {'string_value': None5, 'int_value': 1662454225, 'float_value': None, 'double_value': None}}
 {'key': 'test12', 'value': {'string_value': 'http:\test3.com', 'int_value': None, 'float_value': None, 'double_value': None}}
 {'key': 'test13', 'value': {'string_value': 'A@gmail.com', 'int_value': None, 'float_value': None, 'double_value': None}}]"

期望输出格式

number,event_date,event_timestamp,event_name,event_params1,event_params2
0,20220315,1668314165054758,eventTracking1,test0,None1
0,20220315,1668314165054758,eventTracking1,test2,http:\test1.com
0,20220315,1668314165054758,eventTracking1,test3,A@gmail.com
1,20220325,1668445654758556,eventTracking2,test5,None3
1,20220325,1668445654758556,eventTracking2,test7,http:\test2.com
1,20220325,1668445654758556,eventTracking2,test8,A@gmail.com
2,20220335,1668317775054758,eventTracking3,test10,None5
2,20220335,1668317775054758,eventTracking3,test12,http:\test3.com
2,20220335,1668317775054758,eventTracking3,test13,A@gmail.com

(注:修正了期望输出中test6/None4的笔误,对应原始数据的test5/None3)

问题原因

你的代码仅处理了最后一行数据,核心问题:

  • for i in range(3):循环仅打印了索引值,后续所有处理代码都在循环体外,最终只会用循环结束后的i=2处理第3行数据
  • 每次处理结果没有被收集,而是直接覆盖为新的DataFrame,最终仅保留最后一行的展开结果

修复后的代码

import pandas as pd
import re

# 读取原始CSV文件
df = pd.read_csv("check.csv")

# 定义单一行的处理函数
def process_single_row(row):
    # 获取event_params字段的字符串内容
    params_str = row['event_params']
    # 修复字典列表的格式:在}}后且紧跟{的位置添加逗号
    fixed_str = re.sub(r'}}(\s*{)', r'}},\1', params_str)
    # 将字符串解析为字典列表
    params_list = eval(fixed_str)
    
    # 生成当前行展开后的多行数据
    expanded_rows = []
    for param in params_list:
        expanded_rows.append({
            'number': row['number'],
            'event_date': row['event_date'],
            'event_timestamp': row['event_timestamp'],
            'event_name': row['event_name'],
            'event_params1': param['key'],
            'event_params2': param['value']['string_value']
        })
    return pd.DataFrame(expanded_rows)

# 遍历所有行,收集处理结果
result_dfs = []
for _, row in df.iterrows():
    result_dfs.append(process_single_row(row))

# 合并所有结果并重置索引
df_final = pd.concat(result_dfs, ignore_index=True)

# 调整列顺序为期望格式
df_final = df_final[['number', 'event_date', 'event_timestamp', 'event_name', 'event_params1', 'event_params2']]

# 打印结果并保存为CSV
print(df_final)
df_final.to_csv("This_is_what_you_need.csv", index=False)

关键修复说明

  1. 行遍历逻辑:使用iterrows()遍历原始DataFrame的每一行,确保所有行都被处理
  2. 格式修复优化:修改正则表达式,仅在字典间的分隔位置添加逗号,避免原代码导致的语法错误
  3. 结果收集合并:将每一行处理后的小DataFrame存入列表,最后用concat()合并为最终结果
  4. CSV保存优化:添加index=False参数,避免生成多余的索引列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:40:34