如何用pandas读取带#表头、逗号分隔的县域新冠数据txt并拆分清理列
错误代码的核心问题
- 误将分隔规则设为空白拆分:你给
read_table传了delim_whitespace=True,要求按空格拆分单元格,但实际文件是用逗号分隔所有字段,正文内容完全没有空格拆分的设计,最终就会出现所有正文行被整段塞进单个单元格的问题 - 列名传参逻辑错位:没有跳过文件自带的表头行,就手动传入自定义列名,会导致原表头行被当成普通数据行读取,进一步造成列和数据的错位
- 未处理首行
County字段前的#符号,容易导致后续字段读取出现解析异常 - 自定义列名和原文件字段不匹配:错把
Probable Cases写为单数形式的Probable Case,后续做数据处理时容易出现列名找不到的问题
可直接运行的正确实现
这个文件本质是逗号分隔的结构化文本,不管后缀是.txt还是.csv,都可以直接用pandas的通用读取逻辑适配,有两种常用实现方案:
方案1:完全跳过原表头,使用自定义干净列名
适合需要统一列名格式的场景,代码如下:
import pandas as pd cov = pd.read_csv( 'county-covid-data.txt', sep=',', # 明确指定逗号为字段分隔符,替代原来错误的空格拆分 skiprows=1, # 跳过带#符号的原首行表头 names=['County', 'Confirmed Cases', 'Probable Cases', 'Deaths'] # 传入无多余符号的准确列名 )
读取完成后可以用cov.head()校验,所有字段会正确拆分到对应列,没有内容挤在同一个单元格的问题。
方案2:复用文件自带表头,仅清洗多余符号
不需要手动定义列名,保留文件原生的表头内容,只移除列名前的#,代码如下:
import pandas as pd cov = pd.read_csv('county-covid-data.txt', sep=',') # 仅清洗列名开头的#符号,不改动任何数据内容 cov.columns = cov.columns.str.removeprefix('#')
常见认知误区
不要被.txt的文件后缀限制必须用read_table读取:pandas的读取逻辑只识别文件内的实际分隔规则,read_table本身只是read_csv的一个默认参数调整版,两者没有本质区别。
内容的提问来源于stack exchange,提问作者sarsmth23
相关产品推荐
相关产品推荐

