使用Polars中另一DataFrame列值重命名列时遇TypeError求助
解决方法
错误核心原因:Polars要求DataFrame的列名必须是字符串类型,但你用来设置列名的df_polar_parquet['Depth']列存储的是浮点数,直接转成列表后元素都是float类型,不符合列名的类型要求,因此抛出TypeError。
你可以通过以下几种方式修复:
方法1:转列表时逐个转为字符串
直接在生成列名列表的过程中,把每个浮点数转成字符串:
df_value = df_polar_parquet.select(pl.col('*').exclude('Depth')) df_value_transpose = df_value.transpose(include_header=False) # 将每个Depth值转为字符串后赋值给列名 df_value_transpose.columns = [str(depth) for depth in df_polar_parquet['Depth'].to_list()] df_value_transpose
方法2:用Polars的cast函数先转换列类型
先把Depth列的类型转为字符串,再生成列表:
df_value = df_polar_parquet.select(pl.col('*').exclude('Depth')) df_value_transpose = df_value.transpose(include_header=False) # 先将Depth列转为字符串类型,再转列表 df_value_transpose.columns = df_polar_parquet['Depth'].cast(pl.Utf8).to_list() df_value_transpose
方法3:transpose时直接指定列名(更简洁)
调用transpose时,直接通过column_names参数设置列名,一步完成转换与赋值:
df_value = df_polar_parquet.select(pl.col('*').exclude('Depth')) # 直接在transpose时指定列名,同时完成类型转换 df_value_transpose = df_value.transpose( include_header=False, column_names=df_polar_parquet['Depth'].cast(pl.Utf8).to_list() ) df_value_transpose
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

