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)
我怎么能在熊猫里做到这一点?
使用sum和map:
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.你应该尽可能地避免这种情况.
联合会
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.len和sum
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)
| 归档时间: |
|
| 查看次数: |
1925 次 |
| 最近记录: |