Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于获取字符串长度的向量化操作_Python_Pandas_Dataframe_Vectorization_String Length - Fatal编程技术网

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