我对 Pandas DataFrame 创建感到困惑

问题描述 投票:0回答:2
names = ['Name', 'Score', 'State']
df = pd.DataFrame([{'Sam', 19, 'Tamil Naidu'},
                 {'Kari', 10, 'Himachal Pradesh'},
                 {'Sam', 19, 'Tamil Naidu'},
                  {'Samual Dan', 11, 'Haryana'}], columns = names)

我得到的输出不正确。谁能解释一下原因以及可以做什么?

我尝试创建 DF,然后得到如图所示的输出。当我将州名更改为缩写时,它会被放置在正确的位置,如果我完整书写或增加名称的长度,它会进入错误的列。我很困惑它背后的概念是什么以及为什么会发生这种情况。

python-3.x pandas dataframe
2个回答
0
投票

您使用集合列表作为输入,但集合是无序

您很可能应该使用列表的列表:

names = ['Name', 'Score', 'State']
df = pd.DataFrame([['Sam', 19, 'Tamil Naidu'],
                   ['Kari', 10, 'Himachal Pradesh'],
                   ['Sam', 19, 'Tamil Naidu'],
                   ['Samual Dan', 11, 'Haryana']],
                  columns=names)

输出:

         Name  Score             State
0         Sam     19       Tamil Naidu
1        Kari     10  Himachal Pradesh
2         Sam     19       Tamil Naidu
3  Samual Dan     11           Haryana

0
投票

包含集合的列表不能直接转换为数据帧。转换成dataframe的要求是 输入应该是:

  1. 二维
    list
  2. 或者一个
    dict
    ,其中
    dict
    的每个键的值应该是一个列表

因此,在您目前的情况下,

set
内的每个
list
都可以转换为
sublists
。但问题就在这里:从集合变为列表时,元素的顺序发生了变化。

所以,这里的想法是: 步骤1。列表中的所有集合都应转换为列表

步骤2。使用逻辑标准,子列表内元素的顺序将恢复到原始顺序。

步骤3。转换成数据框

让我们现在就开始吧:

import pandas as pd
names = ['Name', 'Score', 'State']
lst = [{'Sam', 19, 'Tamil Naidu'},
                 {'Kari', 10, 'Himachal Pradesh'},
                 {'Sam', 19, 'Tamil Naidu'},
                  {'Samual Dan', 11, 'Haryana'}]
States = 'Tamil Naidu', 'Himachal Pradesh', 'Haryana'
lst = [list(x) for x in lst]

new_lst = [['a' for x in range(3)] for y in range(4)]

for i,x in enumerate(lst):
    for j, y in enumerate(x):
        if isinstance(y, int):
            new_lst[i][1] = y
        elif y in States:
            new_lst[i][2] = y
        else:
            new_lst[i][0] = y

df = pd.DataFrame(new_lst, columns = names)
print(df)

'''Output:
         Name  Score             State
0         Sam     19       Tamil Naidu
1        Kari     10  Himachal Pradesh
2         Sam     19       Tamil Naidu
3  Samual Dan     11           Haryana
'''
© www.soinside.com 2019 - 2024. All rights reserved.