如何使用pandas读取多分隔符文本文件并设置自定义表头
解决方案
你要读取的是固定宽度格式的天文数据文件,默认pd.read_csv()的分隔规则不匹配该文件格式,按以下步骤操作即可:
1. 确认列规则
该文件的列对应位置和默认列名已经从官方说明文档中整理完成,参数可直接使用:
- 默认列名列表:
['Seq', 'Name', 'RAdeg', 'DEdeg', 'Vmag', 'logTe', 'logg', '[Fe/H]', 'l', 'b', 'D', 'E(B-V)', 'AJ', 'Simbad', '_RA', '_DE'] - 列宽度对应起止位置:
[(0,4), (4,23), (23,32), (32,41), (41,47), (47,53), (53,59), (59,66), (66,74), (74,82), (82,88), (88,94), (94,100), (100,132), (132,140), (140,148)]
如果你需要设置自定义表头,直接替换上述列名列表为你自己定义的名称即可。
2. 调用固定宽度读取接口
pandas提供了专门读取固定宽度文件的pd.read_fwf()接口,传入上述参数即可完成读取,示例代码如下:
import pandas as pd # 自定义/默认列名 col_names = [ 'Seq', 'Name', 'RAdeg', 'DEdeg', 'Vmag', 'logTe', 'logg', '[Fe/H]', 'l', 'b', 'D', 'E(B-V)', 'AJ', 'Simbad', '_RA', '_DE' ] # 列位置规则 colspecs = [ (0,4), (4,23), (23,32), (32,41), (41,47), (47,53), (53,59), (59,66), (66,74), (74,82), (82,88), (88,94), (94,100), (100,132), (132,140), (140,148) ] # 读取数据 df = pd.read_fwf( 'http://cdsarc.u-strasbg.fr/ftp/J/A+A/568/A22/tablef3.dat', colspecs=colspecs, names=col_names )
3. 验证结果
读取完成后执行df.head()即可查看前5行数据,确认列拆分、表头设置均符合预期。
内容的提问来源于stack exchange,提问作者user16936122
相关产品推荐
相关产品推荐

