Как получить длину списков в кадре данных Pandas - PullRequest
4 голосов
/ 09 октября 2019

У меня есть датафрейм в пандах, такой как:

                                                             List
2013-12-22 15:25:02  [good morning, good afternoon, good evening]
2009-12-14 14:29:32             [happy new year, happy birthday,]
2013-12-22 15:42:00                      [happy, sad, mad, chill]

как мне получить что-то вроде этого

                                                             List Len
2013-12-22 15:25:02  [good morning, good afternoon, good evening]   3
2009-12-14 14:29:32             [happy new year, happy birthday,]   2
2013-12-22 15:42:00                      [happy, sad, mad, chill]   4

Я пробовал df ['List']. Str.len (), но возвращает длину в терминах количества слов в этом списке.

Ответы [ 5 ]

1 голос
/ 09 октября 2019

Я думаю, что ваше решение хорошо, если списки в столбце List:

print (type(df.iat[0, df.columns.get_loc('List')]))
<class 'list'>

df['Len'] = df['List'].str.len()

Решение, если не пропущены значения:

df['Len'] = df['List'].apply(len)

Если нет, сначала удалитевозможно , в начале конца на Series.str.strip, а затем считать число , с помощью Series.str.count:

print (type(df.iat[0, df.columns.get_loc('List')]))
<class 'str'>

df['Len'] = df['List'].str.strip(' ,[]').str.count(',') + 1
print (df)
                                                             List  Len
2013-12-22 15:25:02  [good morning, good afternoon, good evening]    3
2009-12-14 14:29:32             [happy new year, happy birthday,]    2
2013-12-22 15:42:00                      [happy, sad, mad, chill]    4

Если необходимо также преобразоватьзначения в списках:

df['List'] = df['List'].str.strip(' ,[]').str.split(', ')
print (type(df.iat[0, df.columns.get_loc('List')]))
<class 'list'>

df['Len'] = df['List'].str.len()
print (df)
                                                             List  Len
2013-12-22 15:25:02  [good morning, good afternoon, good evening]    3
2009-12-14 14:29:32              [happy new year, happy birthday]    2
2013-12-22 15:42:00                      [happy, sad, mad, chill]    4
0 голосов
/ 09 октября 2019

Я не нахожу никаких проблем с вашим кодом. Это должно работать нормально. Как уже упоминалось @moys, вы также можете использовать метод apply для создания нового столбца, который содержит длину столбца списка.

df['length']=df['List'].apply(lambda row: len(row))
print(df)
                                                             List  length
2013-12-22 15:25:02  [good morning, good afternoon, good evening]    3
2009-12-14 14:29:32              [happy new year, happy birthday]    2
2013-12-22 15:42:00                      [happy, sad, mad, chill]    4

Сообщите мне, если у вас есть какие-либо проблемы по этому поводу.

0 голосов
/ 09 октября 2019

Если ваш столбец списка str:

df['Len'] = df['List'].map(lambda x: len(x.split(',')))
0 голосов
/ 09 октября 2019

Использование DataFrame.transform

Пример.

df['Len'] = df['List'].transform(len)
print(df)

                                                             List  Len
2013-12-22 15:25:02  [good morning, good afternoon, good evening]    3
2009-12-14 14:29:32              [happy new year, happy birthday]    2
2013-12-22 15:42:00                      [happy, sad, mad, chill]    4
0 голосов
/ 09 октября 2019

Вы можете использовать это

df['Len']=df['List'].apply(lambda x: len(x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...