如何确定列中列表的长度而不进行迭代?
我有这样一个 Dataframe :
CreationDate
2013-12-22 15:25:02 [ubuntu, mac-osx, syslinux]
2009-12-14 14:29:32 [ubuntu, mod-rewrite, laconica, apache-2.2]
2013-12-22 15:42:00 [ubuntu, nat, squid, mikrotik]
我正在计算CreationDate
列中列表的长度,并创建一个新的Length
列,如下所示:
df['Length'] = df.CreationDate.apply(lambda x: len(x))
这就给了我这个:
CreationDate Length
2013-12-22 15:25:02 [ubuntu, mac-osx, syslinux] 3
2009-12-14 14:29:32 [ubuntu, mod-rewrite, laconica, apache-2.2] 4
2013-12-22 15:42:00 [ubuntu, nat, squid, mikrotik] 4
有没有更像Python的方法?
3条答案
按热度按时间wf82jlnq1#
您还可以将
str
访问器用于某些列表操作。返回每个列表的长度。参见
str.len
的文档。对于这些操作,普通Python通常更快。不过panda处理NaN。下面是时间安排:
vecaoik12#
pandas.Series.map(len)
和pandas.Series.apply(len)
在执行时间上是相等的,并且比pandas.Series.str.len()
稍快。pandas.Series.map
pandas.Series.apply
pandas.Series.str.len
∮ ∮ ∮ ∮
%timeit
snz8szmq3#
转换为列表和
map
函数Pandas Dataframe 列并不意味着存储列表、元组等集合,因为实际上没有任何优化方法可以在这些列上工作,所以当 Dataframe 包含这样的项时,通常将列转换为Python列表并操作列表会更有效。
此外,如果需要对列表中的每个项调用一个函数(特别是像
len()
这样的内置函数),通常使用map
这个函数比在循环中调用它更快。句柄NaN
str.len()
的优点是它可以处理NaN,但是try-except
的自定义函数应该可以填补这个空白。运行时基准测试
本质上,在列表上Map
len
比在Series上循环快大约2.5倍,对于大帧,循环又比pd.Series.str.len
快2.5倍。用于生成上图的代码: