Pandas导入文本文件无法拆分列、仅识别为单列问题求助
列拆分失败的原因
- 初始读取阶段分隔符匹配错误:如果源.dat文件的分隔符不是
numpy.genfromtxt默认识别的单空格,而是多个连续空格、制表符、特殊符号等不可见/非默认分隔符,会把整行内容识别为单个元素,转换为DataFrame后自然只有1列。 - 导出阶段写入格式错误:你直接将过滤得到的DataFrame切片通过
str(H)转为字符串写入文件,这个操作会把DataFrame的索引、列名、排版空格等非数据内容一起写入,输出的文件不是结构化的分隔文本,后续用pd.read_csv读取时无法识别列边界,只能识别为单一大列。 - 额外逻辑冗余:你当前用
groupby('err')的逻辑本质是筛选err小于20的行,完全不需要分组操作,多余的分组逻辑也增加了数据格式混乱的概率。
解决方法
步骤1:直接读取原始.dat文件
跳过numpy中转,直接用pandas读取,明确指定分隔符适配你的源文件格式:
import pandas as pd # 源文件为空白(空格/制表符)分隔时用sep='\s+',可匹配任意数量的空白字符 # 如果是其他分隔符,比如逗号就设sep=',',分号设sep=';'即可 df = pd.read_csv('/path/hubel.dat', sep='\s+', names=['Z', 'H', 'err'])
步骤2:过滤数据并导出结构化文本
直接用布尔索引筛选数据,用pandas自带的to_csv方法导出标准分隔文本,不需要手动循环写文件:
# 筛选err小于20的所有行 df_filtered = df[df['err'] < 20] # 导出为制表符分隔的文本,不需要索引和表头就保留header=False和index=False df_filtered.to_csv("hubble_error_edited-2.txt", sep='\t', index=False, header=False)
步骤3:读取导出的文件
读取时指定和导出时一致的分隔符即可正常拆分列:
data = pd.read_csv("hubble_error_edited-2.txt", sep='\t', names=['Z', 'H', 'err'])
内容的提问来源于stack exchange,提问作者nooshineh zabihi
相关产品推荐
相关产品推荐

