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

2024-06-17 17:01:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建以下数据帧

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)

在我看来,价值观和价值观的形状是一样的。有人能解释一下我遗漏了什么吗?你知道吗

谢谢!你知道吗


Tags: columns数据defaultdataframedfnewdataarray
2条回答

您正在从列表创建数据帧。调用pd.DataFrame(your_list)时,如果您的列表是一个简单的同质列表,则会为该列表中的每个元素创建一行。供您输入:

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

熊猫将创建如下数据帧:

Column
0.15238817285822592
0.11568938193343899
0.16602316602316602
0.17011128775834658
0.2778675282714055
0.11212814645308924
0.20116618075801748

因此,您的数据帧只有一列。您正在尝试传递多个列名,这让熊猫感到困惑。你知道吗

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

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

我们在这个列表中有一个嵌套元组,所以我们的数据帧将有一行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 

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

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

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

相关问题 更多 >