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,然后得到如图所示的输出。当我将州名更改为缩写时,它会被放置在正确的位置,如果我完整书写或增加名称的长度,它会进入错误的列。我很困惑它背后的概念是什么以及为什么会发生这种情况。
您使用集合列表作为输入,但集合是无序。
您很可能应该使用列表的列表:
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
包含集合的列表不能直接转换为数据帧。转换成dataframe的要求是 输入应该是:
list
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
'''