如何用Pandas读取含不等长列与缺失值的固定宽文本为DataFrame
按固定字段长度转换文本为DataFrame的解决方案
当然可以实现,用Python的pandas就能轻松搞定,核心是用专门处理固定宽度文本的read_fwf方法,和你在bash里用substr()的逻辑完全一致——按字符位置/长度截取字段,根本不会因为空格或逗号拆分像"No Presento"这类带空格的字段。
具体步骤:
- 定义字段规则:先明确每个字段的宽度(或起始/结束字符位置),比如字段1占5个字符,字段2占12个,字段3占8个。
- 读取固定宽度文本:用
read_fwf加载文件,指定宽度或位置区间,同时定义列名。 - 处理缺失值:将识别到的缺失值转为空字符串。
示例代码:
假设你的文本文件data.txt内容如下(严格固定长度,缺失位留空):
12345No Presento 20240101 67890 20240102 OtroValor 20240103
对应代码:
import pandas as pd # 定义每个字段的宽度,顺序对应各列 col_widths = [5, 12, 8] # 自定义列名 col_names = ['ID', 'Status', 'Date'] # 读取固定宽度文本,自动按长度分割字段 df = pd.read_fwf('data.txt', widths=col_widths, names=col_names) # 将缺失值转为空字符串(按需调整,也可以保留NaN) df = df.fillna('') print(df)
关键说明:
- 如果不想用宽度,也可以用
colspecs参数指定每个字段的字符区间,比如colspecs=[(0,5), (5,17), (17,25)],效果和widths完全一致。 read_fwf会自动识别固定长度内的空值,配合fillna('')就能把缺失值转为你需要的空字符串格式。- 因为是按字符位置截取,带空格的字符串(比如"No Presento")会完整保留在对应的字段里,不会被拆分。
内容的提问来源于stack exchange,提问作者Benedix
相关产品推荐
相关产品推荐

