如何将这种字典形式转换为pandas数据框?

4

我现在正在使用Python的Pandas模块处理推文数据,但遇到了问题。

我想从这个字典中制作一个频率表(Pandas数据帧):

d = {"Nigeria": 9, "India": 18, "Saudi Arabia": 9, "Japan": 60, "Brazil": 3, "United States": 38, "Spain": 5, "Russia": 3, "Ukraine": 3, "Azerbaijan": 5, "China": 1, "Germany": 3, "France": 12, "Philippines": 8, "Thailand": 5, "Argentina": 9, "Indonesia": 3, "Netherlands": 8, "Turkey": 2, "Mexico": 9, "Italy": 2}

期望的输出为:
>>> import pandas as pd
>>> df = pd.DataFrame(?????)
>>> df

Country      Count
Nigeria      9
India        18
Saudi Arabia 9
.
.
.

无论最左列是否有从0到n的索引,都可以帮我解决这个问题吗?

谢谢提前!

3个回答

4
您只有一个系列(一列带有索引值的数据),因此这个方法可以起作用:
pd.Series(d, name='Count')

如果您想要,可以构建一个DataFrame:

df = pd.DataFrame(pd.Series(d, name='Count'))
df.index.name = 'Country'

现在你拥有:
               Count
Country             
Argentina          9
Azerbaijan         5
Brazil             3
...

2
我同意你所说的不够高效,没有想到使用pd.Series。 - Bharath M Shetty
1
太棒了!!被你的知识感动了!谢谢! - joopyter
1
@John Zwinck 还有 pd.Series(d, name='Count').to_frame() 是另一种表示方式。 - Bharath M Shetty

3
将其作为列表传递
pd.DataFrame([d]).T.rename(columns={0:'count'})

这可能可以完成工作,但会降低性能,因为我们在说键是列,然后进行转置。因此,由于d.items()给出了元组,我们可以这样做:

df = pd.DataFrame(list(d.items()),columns=['country','count'])

df.head()
    country  count
0       Germany      3
1   Philippines      8
2        Mexico      9
3       Nigeria      9
4  Saudi Arabia      9

1
这是低效的。 - John Zwinck
@John,为什么这个不高效? - joaoavf
1
@joaoavf:这与Pandas的内部存储细节有关。根据%timeit,此解决方案比我的答案慢5倍。即使是@jezrael的解决方案,看起来可能不太快,但也比这个快得多。 - John Zwinck
@John 谢谢,很有趣的知识! - joaoavf

3

使用 DataFrame 构造函数,将 valueskeys 分别传递给列:

df = pd.DataFrame({'Country':list(d.keys()), 
                   'Count': list(d.values())}, columns=['Country','Count'])
print (df)
          Country  Count
0      Azerbaijan      5
1       Indonesia      3
2         Germany      3
3          France     12
4          Mexico      9
5           Italy      2
6           Spain      5
7          Brazil      3
8        Thailand      5
9       Argentina      9
10        Ukraine      3
11  United States     38
12         Turkey      2
13        Nigeria      9
14   Saudi Arabia      9
15    Philippines      8
16          China      1
17          Japan     60
18         Russia      3
19          India     18
20    Netherlands      8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接