pandas向量化运算获取字符串长度
pandas vectorized operation to get the length of string
我有一个 pandas 数据框。
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
我知道我可以遍历它并获取长度但是有什么方法可以向量化这个操作吗?我有几百万行。
使用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
我认为最简单的方法是使用DataFrame的apply
方法。
使用此方法,您可以随心所欲地操作数据。
你可以这样做:
df['text_ength'] = df['text'].apply(len)
用你想要的数据创建一个新列。
编辑 看到@jezrael 的回答后,我很好奇并决定计时。
我创建了一个充满 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
我有一个 pandas 数据框。
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
我知道我可以遍历它并获取长度但是有什么方法可以向量化这个操作吗?我有几百万行。
使用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
我认为最简单的方法是使用DataFrame的apply
方法。
使用此方法,您可以随心所欲地操作数据。
你可以这样做:
df['text_ength'] = df['text'].apply(len)
用你想要的数据创建一个新列。
编辑 看到@jezrael 的回答后,我很好奇并决定计时。 我创建了一个充满 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