如何在Python中读取指定列数且含缺失值的空格分隔DataFrame?
解决读取含缺失值的固定列数表格问题
你遇到的报错根源很明确:不管是numpy.genfromtxt还是pandas.read_table,默认都会根据文件第一行的字段数量来推断整个表格的列数。但你的第一行存在缺失值,字段数少于实际的5列,导致后续行的列数匹配失败,触发报错。下面分别给出两种工具的解决方案:
一、使用numpy.genfromtxt读取
你需要明确指定表格的列数,并设置缺失值的填充方式,让genfromtxt知道要按5列解析,缺失的位置用NaN填充:
import numpy as np # 定义5个列名,告诉genfromtxt表格有5列 df = np.genfromtxt( 'table', delimiter=' ', autostrip=True, # 自动去除每个字段的前后空格 filling_values=np.nan, # 缺失值填充为NaN names=['col1', 'col2', 'col3', 'col4', 'col5'] )
如果不需要列名,也可以通过dtype参数间接指定列数:
df = np.genfromtxt( 'table', delimiter=' ', autostrip=True, filling_values=np.nan, dtype=(float, 5) # 指定每行是5个float类型元素 )
二、使用pandas读取
pandas的核心思路同样是明确指定列数,通过names参数定义5个列名,让工具按5列解析:
方法1:用read_table
import pandas as pd df = pd.read_table( 'table', delim_whitespace=True, # 用任意空格作为分隔符 header=None, # 文件无表头 names=['col1', 'col2', 'col3', 'col4', 'col5'] # 指定5列列名 )
方法2:用read_csv(更灵活)
read_table默认用制表符分隔,用read_csv搭配sep='\s+'匹配任意空格,效果更稳定:
df = pd.read_csv( 'table', sep='\s+', # 匹配一个或多个空格作为分隔符 header=None, names=['col1', 'col2', 'col3', 'col4', 'col5'] )
执行后,第一行的缺失值会自动填充为NaN,整个表格会被正确解析为4行5列的DataFrame。
内容的提问来源于stack exchange,提问作者user16454053
相关产品推荐
相关产品推荐

