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

Lea*_*ner 7 python python-3.x pandas

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

 keywords
 ['loans','mercedez','bugatti']
 ['trump','usa']
 ['galaxy','7s','canon','macbook']
 ['beiber','spiderman','marvels','ironmen']
Run Code Online (Sandbox Code Playgroud)

我想在列中汇总列表元素的总数keywords并将其存储到某个变量中.就像是

total_sum=elements in keywords[0]+elements in keywords[1]+elements in 
          keywords[2]+elements in keywords[3]

total_sum=3+2+4+4
total_sum=13
Run Code Online (Sandbox Code Playgroud)

我怎么能在熊猫里做到这一点?

use*_*203 6

使用summap:

sum(map(len, df.keywords))
Run Code Online (Sandbox Code Playgroud)

样品

df = pd.DataFrame({
    'keywords': [['a', 'b', 'c'], ['c', 'd'], ['a', 'b', 'c', 'd'], ['g', 'h', 'i']]
})

sum(map(len, df.keywords))
Run Code Online (Sandbox Code Playgroud)

12
Run Code Online (Sandbox Code Playgroud)

计时

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)
Run Code Online (Sandbox Code Playgroud)

验证

>>> sum(map(len, df.keywords)) == df.keywords.map(len).sum() == df.keywords.str.len().sum()
True
Run Code Online (Sandbox Code Playgroud)

一点免责声明:pandas在包含列表的列上使用方法总是效率低下(这就是为什么在这里使用非pandas的方法要快得多),因为DataFrames并不意味着存储list.你应该尽可能地避免这种情况.


raf*_*elc 5

联合会

设定

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

然后使用str.lensum

df.keywords.str.len().sum()
Run Code Online (Sandbox Code Playgroud)

详情:

df.keywords.str.len()

0    3
1    2
2    4
3    4
Name: keywords, dtype: int64
Run Code Online (Sandbox Code Playgroud)

附:如果您strings看起来像一个列表,ast.literal_eval请先转换为列表。

df.keywords.transform(ast.literal_eval).str.len().sum()
Run Code Online (Sandbox Code Playgroud)

  • 我将不得不跟进:)将这种功能作为str访问器的一部分让我有些惊讶 (2认同)

mer*_*tah 5

你可以试试这个:

df.keywords.map(len).sum()
Run Code Online (Sandbox Code Playgroud)