Pandas添加列后输出文件异常问题求助
问题排查与解决方案
看起来你的代码在文件读取、日期提取和列添加环节都存在一些小问题,导致没得到预期输出。咱们一步步梳理修正:
问题点分析
- 分隔符设置错误:输入文件是逗号分隔的,但你用了
sep='\t'(制表符分隔),这会导致Pandas读取数据时格式完全混乱。 - 日期提取逻辑偏差:日期实际在文件第一行(索引0)的第三个位置,但你用
df.iloc[1]取了第二行,且用字符串拆分的方式过于繁琐。 - 列添加方式不当:
apply返回列表会让新列的值带上括号,不符合预期的纯字符串格式。 - 输出包含冗余索引:默认
to_csv会输出DataFrame的索引列,这会让结果多一列不必要的内容。
修正后的完整代码
import pandas as pd # 1. 提取目标日期:直接读取文件第一行拆分获取 with open('C:/Working/dalal/MTO_11052018.DAT', 'r') as f: first_line = f.readline().strip() trans_dt = first_line.split(',')[2] # 2. 读取有效数据行:跳过前3行无关内容,用逗号分隔 df2 = pd.read_csv('C:/Working/dalal/MTO_11052018.DAT', sep=',', skiprows=3, header=None) # 3. 添加日期列:直接批量赋值,无需复杂的apply操作 df2['Trans_dt'] = trans_dt # 4. 输出文件:去掉索引和表头,完全匹配预期格式 df2.to_csv('C:/Working/dalal/deldata/MTO_11052018.OUT', sep=',', index=False, header=False)
代码说明
- 日期提取:用原生文件操作直接读取第一行,拆分后拿到目标日期,比用Pandas读取更简洁高效。
- 数据读取:
sep=','正确识别逗号分隔格式,skiprows=3跳过前两行表头信息和第三行列名,header=None避免将列名当作数据行。 - 列添加:直接给新列赋值日期字符串,Pandas会自动为所有行填充该值,避免了
apply带来的列表格式问题。 - 输出设置:
index=False移除默认索引列,header=False不输出列名,完全贴合你想要的预期输出格式。
运行这段代码后,就能得到符合要求的输出文件了!
内容的提问来源于stack exchange,提问作者Gower
相关产品推荐
相关产品推荐

