动态列表结合固定字符串选取DataFrame列报错:TypeError解决
解决DataFrame列选取时的TypeError问题
问题原因
你写的df[['c1', column_list]]里,column_list本身是列表,导致传入的是嵌套列表['c1', ['c2','c3']]。pandas选取列需要一维的可哈希序列(比如普通列表、元组),而列表是不可哈希类型,所以触发TypeError: unhashable type: 'list'。
解决方案
只需要把固定列和动态列表合并成一个一维列表即可,以下是几种常用方法:
方法1:列表直接拼接(最简洁)
将固定列'c1'放到列表中,再和column_list拼接:
import pandas as pd df = pd.DataFrame([], columns=['c1','c2','c3','c4']) column_list= ['c2','c3'] # 合并成一维列表 selected_columns = ['c1'] + column_list df2 = df[selected_columns]
方法2:用extend构建列表
先创建包含固定列的列表,再扩展动态列表:
selected_columns = ['c1'] selected_columns.extend(column_list) df2 = df[selected_columns]
方法3:使用元组拼接(可选)
如果习惯用元组,也可以用元组拼接后转成列表:
selected_columns = list(('c1',) + tuple(column_list)) df2 = df[selected_columns]
这些方法都能生成一维的列名序列,pandas可以正常识别并选取对应列。
内容的提问来源于stack exchange,提问作者lara_toff
相关产品推荐
相关产品推荐

