无法在python中创建pandas DataFrame(错误的形状)

时间:2017-06-29 19:12:53

标签: python pandas dataframe

我试图创建以下数据框

new_df = pd.DataFrame(data = percentage_default, columns = 
df['purpose'].unique())

我使用的变量如下

percentage_default = [0.15238817285822592,
0.11568938193343899,
0.16602316602316602,
0.17011128775834658,
0.2778675282714055,
0.11212814645308924,
0.20116618075801748]

df['purpose'].unique = array(['debt_consolidation', 'credit_card', 'all_other',
   'home_improvement', 'small_business', 'major_purchase',
   'educational'], dtype=object)

当我尝试创建此数据框时,出现以下错误:

Shape of passed values is (1, 7), indices imply (7, 7)

对我来说,似乎价值观和内容的形状是一样的。有人可以解释一下我在这里失踪了吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试以下一种方式重写数据:

percentage_default = {
    'debt_consolidation': 0.15238817285822592,
    'credit_card': 0.11568938193343899,
    ...
}

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html

答案 1 :(得分:1)

您正在从列表中创建数据框。调用pd.DataFrame(your_list),其中your_list是一个简单的同源列表,将为该列表中的每个元素创建一行。您的意见:

percentage_default = [0.15238817285822592,
                      0.11568938193343899,
                      0.16602316602316602,
                      0.17011128775834658,
                      0.2778675282714055,
                      0.11212814645308924,
                      0.20116618075801748]

pandas会创建一个这样的数据框:

Column
0.15238817285822592
0.11568938193343899
0.16602316602316602
0.17011128775834658
0.2778675282714055
0.11212814645308924
0.20116618075801748

因此,您的数据框只有一列。你试图传递多个列名,这会让熊猫感到困惑。

如果要从包含多列的列表创建数据框,则需要在原始列表中嵌套更多列表或元组。每个嵌套元组/列表将成为数据框中的一行,嵌套元组/列表中的每个元素将成为新列。见:

percentage_default = [(0.15238817285822592,
                       0.11568938193343899,
                       0.16602316602316602,
                       0.17011128775834658,
                       0.2778675282714055,
                       0.11212814645308924,
                       0.20116618075801748)] # nested tuple

我们在此列表中有一个嵌套元组,因此我们的数据帧将有1行,其中n列,其中n是嵌套元组中元素的数量(7)。然后我们可以传递您的7个列名称:

percentage_default = [(0.15238817285822592,
                       0.11568938193343899,
                       0.16602316602316602,
                       0.17011128775834658,
                       0.2778675282714055,
                       0.11212814645308924,
                       0.20116618075801748)]

col_names = ['debt_consolidation', 'credit_card', 'all_other',
             'home_improvement', 'small_business', 'major_purchase',
             'educational']

new_df = pd.DataFrame(percentage_default, columns = col_names)
print(new_df)


    debt_consolidation  credit_card  all_other  home_improvement  \
0            0.152388     0.115689   0.166023          0.170111   

   small_business  major_purchase  educational  
0        0.277868        0.112128     0.201166