2016-06-07 66 views
2

我有一個熊貓數據框。熊貓矢量化操作獲取字符串的長度

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 

我知道我可以遍歷,並得到了長度,但有什麼辦法向量化這種操作?我有幾百萬行。

回答

2

我認爲最簡單的方法是使用數據框的apply方法。使用此方法,您可以以任何您想要的方式操作數據。

你可以這樣做:

df['text_ength'] = df['text'].apply(len) 

創造你想要的數據的新列。


編輯看到@jezrael答案後,我很好奇,決定timeit。 我創建了一個充滿了lorem ipsum句子(101000行)的DataFrame,差別非常小。對我來說,我得到了:

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 
+0

感謝您的時間。有趣的是看到申請比內置str.len更快! – Aaron

+0

不適用的問題與不適用是因爲這不適用於NaN值;堅持字符串方法 – Jeff

3

使用str.len

print (df.text.str.len())     
0 11 
1 25 
2 13 
Name: text, dtype: int64 

樣品:

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