如何使用Pandas读取前3列值含空格的固定宽度空格分隔文本文件
完全可以用Pandas实现你要的读取效果,Pandas内置的read_fwf()(固定宽度文件读取函数)就是专门处理这类固定列宽+后续空格分隔的混合格式场景的。
具体实现步骤
- 先定义列的读取规则:你提到前3列每列固定占7个字符,因此前3列的字符起止位置分别为
(0,7)、(7,14)、(14,21),剩余所有字符从位置21开始单独归为一列。 - 按固定宽度规则读取文件后,把最后一列的剩余内容按空格拆分,得到后5列数值,和前3列合并即可得到8列的目标DataFrame。
示例代码
import pandas as pd # 定义每列的起止位置区间 col_specs = [ (0, 7), (7, 14), (14, 21), (21, None) ] # 按固定宽度读取文件,header=None表示原文件没有表头 df = pd.read_fwf("你的文件路径.txt", colspecs=col_specs, header=None) # 拆分最后一列的剩余内容为后5列,可根据需要转换为数值类型 df_last_cols = df[3].str.split(expand=True).astype(float) # 合并前3列和后5列,自定义列名 result = pd.concat([df[[0,1,2]], df_last_cols], axis=1) result.columns = ["col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8"]
补充说明
如果你需要把前3列的前后冗余空格去掉,可以对前3列做一次去空格处理:
result[["col1", "col2", "col3"]] = result[["col1", "col2", "col3"]].apply(lambda x: x.str.strip())
用你给出的示例数据测试,最终输出的前3列会正确保留列内部的空格,后5列也会正确解析为对应数值,完全符合你要求的输出格式。
内容的提问来源于stack exchange,提问作者user3476187
相关产品推荐
相关产品推荐

