Python 用于获取字符串长度的向量化操作
我有一个熊猫数据框Python 用于获取字符串长度的向量化操作,python,pandas,dataframe,vectorization,string-length,Python,Pandas,Dataframe,Vectorization,String Length,我有一个熊猫数据框 df = pd.DataFrame(['Donald Dump','Make America Great Again!','Donald Shrimp'], columns=['text']) 我想要的是Dataframe中的另一列,它的长度与“text”列中的字符串相同 例如,上面的例子是 text text_length 0 Donald Dump
df = pd.DataFrame(['Donald Dump','Make America Great Again!','Donald Shrimp'],
columns=['text'])
我想要的是Dataframe中的另一列,它的长度与“text”列中的字符串相同
例如,上面的例子是
text text_length
0 Donald Dump 11
1 Make America Great Again! 25
2 Donald Shrimp 13
我知道我可以循环通过它并获得长度,但是有没有办法将这个操作矢量化?我有几百万行。使用:
样本:
import pandas as pd
df = pd.DataFrame(['Donald Dump','Make America Great Again!','Donald Shrimp'],
columns=['text'])
print (df)
text
0 Donald Dump
1 Make America Great Again!
2 Donald Shrimp
df['text_length'] = (df.text.str.len())
print (df)
text text_length
0 Donald Dump 11
1 Make America Great Again! 25
2 Donald Shrimp 13
我认为最简单的方法是使用数据帧的
apply
方法。
使用此方法,您可以任意操作数据
你可以这样做:
df['text_ength'] = df['text'].apply(len)
创建包含所需数据的新列
编辑看到@jezrael的答案后,我很好奇,决定计时。 我用lorem ipsum语句(101000行)创建了一个完整的数据框架,差别非常小。对我来说,我得到了:
In [59]: %timeit df['text_length'] = (df.text.str.len())
10 loops, best of 3: 20.6 ms per loop
In [60]: %timeit df['text_length'] = df['text'].apply(len)
100 loops, best of 3: 17.6 ms per loop
谢谢你的时间安排。有趣的是,应用比内置str.len更快!apply除了不惯用外,还有一个问题,那就是它对NaN值不起作用;坚持使用字符串方法
In [59]: %timeit df['text_length'] = (df.text.str.len())
10 loops, best of 3: 20.6 ms per loop
In [60]: %timeit df['text_length'] = df['text'].apply(len)
100 loops, best of 3: 17.6 ms per loop