2016-05-19 1 views
4

Есть панд dataframe:Как получить длину значения ячейки в pandas dataframe?

idx Event 
0 abc/def 
1 abc 
2 abc/def/hij 

Run: df['EventItem'] = df['Event'].str.split("/")

Got:

idx EventItem 
0 ['abc','def'] 
1 ['abc'] 
2 ['abc','def','hij'] 

Хотите, чтобы получить длину каждого cell, запустите df['EventCount'] = len(df['EventItem'])

GOT:

idx EventCount 
0 6 
1 6 
2 6 

Как я могу получить правильный счет, как следует?

idx EventCount 
0 2 
1 1 
2 3 

ответ

7

Вы можете использовать .str.len, чтобы получить длину списка, даже если списки не являются строками:

df['EventCount'] = df['Event'].str.split("/").str.len() 

В качестве альтернативы, количество вы ищете только 1 больше, чем кол из "/"-й в строке, так что вы можете добавить 1 к результату .str.count:

df['EventCount'] = df['Event'].str.count("/") + 1 

Результирующий выходной сигнал для любого метода:

  Event EventCount 
0  abc/def   2 
1   abc   1 
2 abc/def/hij   3 

Задержки на несколько большем DataFrame:

%timeit df['Event'].str.count("/") + 1 
100 loops, best of 3: 3.18 ms per loop 

%timeit df['Event'].str.split("/").str.len() 
100 loops, best of 3: 4.28 ms per loop 

%timeit df['Event'].str.split("/").apply(len) 
100 loops, best of 3: 4.08 ms per loop 
+0

Wow, '.str.len' работает в списках ! – IanS

3

Вы можете использовать apply применить функцию len для каждого столбца:

df['EventItem'].apply(len) 

0 2 
1 1 
2 3 
Name: EventItem, dtype: int64 
Смежные вопросы