Polars读取无表头CSV自定义列名报错:List对象不可调用
解决Polars scan_csv自定义无表头CSV列名报错问题
问题原因
Polars的scan_csv方法中,with_column_names参数要求传入可调用对象(函数),而非直接传入列名列表。该函数会接收Polars自动生成的默认列名列表作为参数,需要返回自定义的列名列表。直接传列表会被Python当作可调用对象执行,因此触发“List object is not callable”错误。
正确解决方案
方法1:使用lambda函数快速设置
直接用lambda忽略默认列名参数,返回自定义列名列表:
import polars as pl header = ["col1", "col2"] df = pl.scan_csv(file_path, has_header=False, with_column_names=lambda _: header)
方法2:定义独立函数设置
如果需要更复杂的逻辑,可以定义专门的函数(注意传入函数名,不要加括号调用):
import polars as pl def get_custom_columns(default_cols): # 可根据默认列名做自定义逻辑,比如映射、扩展等 return ["col1", "col2"] df = pl.scan_csv(file_path, has_header=False, with_column_names=get_custom_columns)
对之前尝试的错误说明
- 直接传
header/header[:]/list(header):这些都是传递列表,不符合with_column_names对可调用对象的要求,因此报错。 - 使用
def_fun(header):这是调用函数,返回的是列表,依然不是可调用对象,所以同样报错。正确做法是直接传函数名(如def_fun),让Polars内部去调用它。 - 使用
list[header]:这是语法错误(列表不能用另一个列表作为索引),实际并未生效,因此Polars仍使用默认列名。
内容的提问来源于stack exchange,提问作者Muhammad D Vikar
相关产品推荐
相关产品推荐

