如何使用Pandas和Matplotlib.pyplot从字典列表中生成正确的条形图

时间:2017-10-19 14:51:15

标签: python pandas dictionary twitter list-comprehension

我的问题是我正在尝试创建条形图,但输出不正确。

我有一个词典列表。

每个字典都包含与Twitter上数千条推文相关的所有数据和属性。每个字典都包含属性作为键:值组合,包括推文内容,推文人员的屏幕名称,推文语言,推文来源国等等。

要创建语言属性的条形图,我有一个列表推导,尝试在列表中读取Pandas数据帧,并将数据输出为条形图,每个最常用的5种语言有5个频率条在我的推文列表中。

以下是我的语言栏图的代码(请注意,我的每条推文的词典列表名为tweets_data)

var imgView = NSImageView(frame: NSRect(origin: CGPoint(x: x, y: 0), size: img.size))

x += 100

正如我所说的那样,我应该得到5个条,一个用于我数据中前五种语言中的每一种。相反,我将在下面显示图表。enter image description here

1 个答案:

答案 0 :(得分:2)

你的问题在这里:

tweets_df['lang'] = map(lambda tweet: tweet['lang'], tweets_data)

正如您的评论所暗示的那样,问题取决于从Python 2到3的变化。在Python 2中,map()返回一个列表。但是在Python 3中,map() returns an iterator。提示是tweets_df['lang'].value_counts()只有一个值,它是<map ... >迭代器对象的唯一值。

在Python 2或3中,您可以改为使用列表推导:

tweet_by_lang = pd.Series([tweet['lang'] for tweet in tweets_data]).value_counts()

或者在Python 3中,您可以按照上面链接的答案关注@ Triptych的建议,并将map()包裹在list()中:

tweets_df['lang'] = list(map(lambda tweet: tweet['lang'], tweets_data))