Python用列表创建字典生成pandas DataFrame时行列错位如何解决
问题解决方法
现有代码的问题在于,直接将all_data中的子列表作为对应key的列值,但all_data里的每个子列表实际是一行数据,而非一列数据,导致最终DataFrame的行列映射反了。
按照你必须先创建字典再生成DataFrame的要求,只需要在构造字典前将all_data转置即可,使用zip(*all_data)即可快速实现列表的行列转置:zip(*all_data)会把all_data中每个子列表的对应位置元素打包成新的元组,相当于把原来按行存储的数据转为按列存储,正好匹配keys到列的映射需求。
修改后的完整代码如下:
import pandas as pd keys= ["car", "cat", "sky"] value_a = ['red', 'furry','cloudy'] value_b = ['blue', 'puffy','rainy'] value_c = ['yellow', 'pet','clear'] all_data = [value_a ,value_b,value_c] def csv_exporter(keys, all_data): # 先转置all_data,再和keys配对构造字典 dictionary = dict(zip(keys, zip(*all_data))) df = pd.DataFrame(dictionary) print(df) csv_exporter(keys, all_data)
运行后输出结果为:
car cat sky 0 red furry cloudy 1 blue puffy rainy 2 yellow pet clear
完全符合预期效果。
内容的提问来源于stack exchange,提问作者Ahmed Anwer
相关产品推荐
相关产品推荐

