gpt4 book ai didi

python - 将 Pandas 'findall' 结果列表拆分为多个项目,以按唯一性分组

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:29 25 4
gpt4 key购买 nike

我已经下载了我的 Twitter 存档,我正在尝试对与我交谈最多的人进行一些分析。

推文 CSV 列如下所示:

tweet_id,in_reply_to_status_id,in_reply_to_user_id,retweeted_status_id,retweeted_status_user_id,timestamp,source

我使用 read_csv() 将 tweets.csv 文件导入到名为“indata”的数据框中。

然后,为了获取推文中提到的所有@handles 的列表,我使用了以下内容:

handles = indata['text'].str.findall('@[a-zA-Z0-9_-]*')

结果:

timestamp
...
2013-04-12 11:24:27 [@danbarker]
2013-04-12 11:22:32 [@SeekTom]
2013-04-12 10:50:45 [@33Digital, @HotwirePR, @kobygeddes, @]
2013-04-12 08:00:03 [@mccandelish]
2013-04-12 07:59:01 [@Mumbrella]
...
Name: text, dtype: object

我想做的是按个人句柄和日期分组,以显示这些年来与我交谈最多的人的数量。

有什么建议吗?

最佳答案

一种纯粹的 pandas 方法可能是应用 Series 构造函数将其放入一个 DataFrame 中并堆叠到一个 Series 中(这样您就可以使用 value_counts)...如果您不关心索引/时间戳,您可以使用集合(哪个可能更快):

In [11]: df = pd.DataFrame([['@a @b'], ['@a'], ['@c']], columns=['tweets'])

In [12]: df
Out[12]:
tweets
0 @a @b
1 @a
2 @c

In [13]: at_mentions = df['tweets'].str.findall('@[a-zA-Z0-9_]+')

注意:我在这里使用 + 而不是 *,因为我认为 @ 本身不应该被包括在内.

In [14]: at_mentions
Out[14]:
0 [@a, @b]
1 [@a]
2 [@c]
Name: tweets, dtype: object

使用 collections' Counter这很简单:

In [21]: from collections import Counter

In [22]: Counter(at_mentions.sum())
Out[22]: Counter({'@a': 2, '@b': 1, '@c': 1})

pandas 方式将保留索引(时间)信息。

Apply用于获取 DataFrame 和 stack 的系列构造函数它变成一个系列:

In [31]: all_mentions = at_mentions.apply(pd.Series)

In [32]: all_mentions
Out[33]:
0 1
0 @a @b
1 @a NaN
2 @c NaN

我们可以整理这里的名称,以便更好地描述正在发生的事情:

In [33]: all_mentions.columns.name = 'at_number'

In [34]: all_mentions.index.name = 'tweet' # this is timestamp in your example

现在当我们堆叠时,我们会看到级别的名称:

In [35]: all_mentions = all_mentions.stack()

In [36]: all_mentions
Out[36]:
tweet at_number
1 0 @a
1 @b
2 0 @a
3 0 @c
dtype: object

我们可以在这里做很多其他分析,例如 value_counts :

In [37]: all_mentions.value_counts()
Out[37]:
@a 2
@c 1
@b 1
dtype: int64

最终结果等同于 pd.Series(Counter(at_mentions.sum()))

关于python - 将 Pandas 'findall' 结果列表拆分为多个项目,以按唯一性分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com