统计pandas列中列表元素的总数

2024-10-01 13:33:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧A,列keywords为 (这里我只显示了4行,但实际上有数百万):

 keywords
 ['loans','mercedez','bugatti']
 ['trump','usa']
 ['galaxy','7s','canon','macbook']
 ['beiber','spiderman','marvels','ironmen']

我想求出keywords列中列表元素的总数,并将其存储到某个变量中。有点像

^{pr2}$

我怎么能在熊猫身上做到呢?在


Tags: 数据pandasgalaxymacbookkeywordsusaspidermancanon
3条回答

使用summap

sum(map(len, df.keywords))

样本

^{pr2}$

12

计时

df = pd.concat([df]*10000)

%timeit sum(map(len, df.keywords))
1.87 ms ± 52.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit df.keywords.map(len).sum()
13.5 ms ± 661 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit df.keywords.str.len().sum()
14.3 ms ± 272 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

验证

>>> sum(map(len, df.keywords)) == df.keywords.map(len).sum() == df.keywords.str.len().sum()
True

有点免责声明:在包含列表的列上使用pandas方法总是效率低下(这就是为什么在这里使用非pandas的方法要快得多),因为数据帧不是用来存储list。你应该尽量避免这种情况。在

IIUC公司

设置

df = pd.DataFrame()
df['keywords']=[['loans','mercedez','bugatti'], 
                ['trump','usa'], 
                ['galaxy','7s','canon','macbook'], 
                ['beiber','spiderman','marvels','ironmen']]

然后使用^{}和{}

^{pr2}$

详细信息:

df.keywords.str.len()

0    3
1    2
2    4
3    4
Name: keywords, dtype: int64

Ps:如果您的strings看起来像一个列表,请先使用ast.literal_eval转换成list。在

df.keywords.transform(ast.literal_eval).str.len().sum()

你可以试试这个:

df.keywords.map(len).sum()

相关问题 更多 >