【问题标题】:How to count the elements of a list within a pandas series如何计算熊猫系列中列表的元素
【发布时间】:2020-12-12 17:15:18
【问题描述】:

我有以下数据结构。

basket_series = df_train["basket"].head(10)
type(basket_series) 

Output: pandas.core.series.Series

0                [3]
1       [5, 3, 0, 3]
2       [3, 3, 1, 4]
3                [2]
4       [4, 4, 4, 4]
5       [4, 3, 4, 4]
6             [3, 4]
7    [4, 4, 1, 4, 4]
8       [1, 5, 2, 2]
9          [5, 5, 0]

我想知道每个“列表”有多少个数字 -> 但我认为“列表”仅被解释为字符串。 我的方法是:

basket_series.size()  

output: 10

for x in basket_series: 
  print(len(x)) 

output: 3 12 12 3 12 12 6 15 12 9 好像是一样的

basket_series.str.len()
for x in basket_series:
    print(len(list(x)))

所以问题是它被视为一个字符串?你有什么想法吗?

【问题讨论】:

  • 这是一列列表,还是只是一列“看起来”像列表的字符串
  • 是的,它被表示为一个字符串:好的,当前的方法现在看起来像这样for x in basket_series: x = ast.literal_eval(x) print(len(x))stackoverflow.com/questions/1894269/…
  • 这绝对取决于您指定的数据框。 pd.Series 对象可以保存列表。检查你的类型:for x in basket_series: print(type(list(x)))
  • @Daniel 你可以使用basket_series.map(ast.literal_eval).str.len()
  • 如果它是一个字符串,您可以使用 json 将其转换为数组。导入json; len(json.loads('[1,2,3,4]'))

标签: python pandas numpy size series


【解决方案1】:

我想部分答案已经包含在 cmets 中,但这里是完整性的代码-

import pandas as pd
from ast import literal_eval

l = ['[3]',
     '[5, 3, 0, 3]',
     '[3, 3, 1, 4]',
     '[2]',
     '[4, 4, 4, 4]',
     '[4, 3, 4, 4]',
     '[3, 4]',
     '[4, 4, 1, 4, 4]',
     '[1, 5, 2, 2]',
     '[5, 5, 0]']

s = pd.Series(l)
print(s.map(literal_eval).apply(len))
0    1
1    4
2    4
3    1
4    4
5    4
6    2
7    5
8    4
9    3

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2018-09-04
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    相关资源
    最近更新 更多