Pandas-Python中能否不依赖列顺序、直接通过列名获取列值?
问题根源
你当前的读取代码使用names参数强制指定了列名列表,同时没有启用表头解析逻辑,pandas会直接按你给定的cols顺序给所有列赋值,完全不会读取csv第一行自带的列名,自然会出现列顺序调整后值错位的问题。
解决方法
核心逻辑是让pandas自动读取csv第一行作为列名,后续直接通过列名匹配取值,和列的实际排列顺序完全无关。
基础读取代码
import pandas as pd import io data_set = csv_file.read().decode('UTF-8') io_string = io.StringIO(data_set) # 不传names参数,默认header=0会将csv第一行识别为列名 df = pd.read_csv(io_string)
读取完成后你可以直接通过列名取对应的值,比如df['whatever1']就能拿到whatever1列的所有值,不管这一列在csv里排在第几的位置。
可选优化:限制只读取需要的列
如果你只需要固定的几列,可以在读取时指定usecols参数,既会自动校验列是否存在,也会忽略多余列,节省内存:
required_cols = ['whatever1','whatever2','whatever3','whatever4','whatever5'] df = pd.read_csv(io_string, usecols=required_cols)
可选优化:调整列到固定顺序
如果后续处理需要列按固定顺序排列,可以在读取后用reindex调整:
required_cols = ['whatever1','whatever2','whatever3','whatever4','whatever5'] # 自动按给定列表调整列顺序,不存在的列会赋值为NaN df = pd.read_csv(io_string).reindex(columns=required_cols)
内容的提问来源于stack exchange,提问作者Miguel Herreros Cejas
相关产品推荐
相关产品推荐

