Python 2.7环境下使用Pandas将多空格分隔文件转换为CSV的方法
固定宽度/多空格分隔文件转标准CSV Pandas解决方案
场景适配说明
你提到的列宽固定、多空格分隔两种场景,Pandas都有原生方法支持,不需要手动做字符串截取,代码量大幅减少。
方案1:固定宽度文件读取(推荐)
适合你之前用列宽截取的业务场景,数百个字段也能自动处理,比分隔符匹配更稳定:
import pandas as pd # 读取固定宽度文件 df = pd.read_fwf( "你的原始数据文件路径.txt", infer_nrows=200, # 字段数量多的话可以调大该值,提升列宽推断准确率 parse_dates=[["DATE", "TIME"]], # 自动合并DATE、TIME列为时间戳类型 keep_date_col=False # 不需要保留原始DATE、TIME列的话设为False即可 ) # 导出为标准CSV df.to_csv("输出的标准CSV路径.csv", index=False, encoding="utf-8-sig")
方案2:多空格/多符号分隔读取
如果你的字段是靠可变数量的分隔符(空格/点)区分,用该方案:
import pandas as pd # 多空格分隔场景,sep用正则匹配1个及以上空白 df = pd.read_csv( "你的原始数据文件路径.txt", sep=r"\s+", parse_dates=[["DATE", "TIME"]], engine="python" ) # 如果是样例中展示的多个点作为分隔符,把sep参数改为r"\.+"即可 # df = pd.read_csv("你的原始数据文件路径.txt", sep=r"\.+", parse_dates=[["DATE", "TIME"]], engine="python") # 导出CSV df.to_csv("输出的标准CSV路径.csv", index=False, encoding="utf-8-sig")
可选优化:自定义时间解析
如果默认时间解析不符合要求,可手动指定时间格式,解析精度更高:
from datetime import datetime # 自定义时间解析函数,匹配你数据中的年-月-日 时:分:秒.毫秒格式 date_parser = lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S.%f") # 把该参数传入read_fwf或read_csv即可,示例: df = pd.read_fwf( "你的原始数据文件路径.txt", infer_nrows=200, parse_dates=[["DATE", "TIME"]], date_parser=date_parser, keep_date_col=False )
结果验证
可以执行以下代码确认读取结果是否符合预期:
# 查看前5行数据 print(df.head()) # 查看字段类型,确认合并后的DATE_TIME列是datetime64类型,可直接作为绘图的X轴参数 print(df.dtypes)
内容的提问来源于stack exchange,提问作者user1526470
相关产品推荐
相关产品推荐

