Пустые строки в серии панд засчитываются как одна при получении количества слов в строках - PullRequest
0 голосов
/ 21 октября 2018

У меня проблема при подсчете количества предметов в ряду строк панд, когда в строке нет жала.

Я могу подсчитать количество слов при наличии одного или нескольких предметовза рядНо, если строка не имеет значения (это пустая строка при запуске pd. ['Mytext']. Str.split (',')), я получаю также один.

Эти ответыне работают для меня Ответ 1 на решение, которое дает один для пустой строки Ответ 2 на решение, которое дает один для пустой строки .

Как можноЯ справлюсь с этим в панде один лайнер?Заранее спасибо.

Взял пример из первого ответа:

df = pd.DataFrame(['one apple','','box of oranges','pile of fruits outside', 'one banana', 'fruits'])
df.columns = ['fruits']

Подтвержденный ответ был

count = df['fruits'].str.split().apply(len).value_counts()
count.index = count.index.astype(str) + ' words:'
count.sort_index(inplace=True)
count

Что дает

Out[13]:  
0 words:    1
1 words:    1
2 words:    2
3 words:    1
4 words:    1
Name: fruits, dtype: int64

Я хочу ноль для второй строки, но каждое пробное решение давало мне единицу.

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

В вашем вопросе вы имеете в виду str.split(','), но примеры приведены для str.split().Функция имеет другое поведение в зависимости от того, есть ли у вас аргумент.

Что вы на самом деле пытаетесь сделать?

0 голосов
/ 22 октября 2018

Используйте str.split и считайте элементы с str.len:

df['wordcount'] = df.fruits.str.split().str.len()
print(df)
                   fruits  wordcount
0               one apple          2
1                                  0
2          box of oranges          3
3  pile of fruits outside          4
4              one banana          2
5                  fruits          1

Замените ' ' на ',' для ваших фактических данных.

0 голосов
/ 21 октября 2018

При использовании split() пустая строка возвращает пустой список, однако при использовании split(',') пустая строка возвращает список с пустой строкой.Вот почему пример не работает с вашим решением.

Вы можете попробовать что-то, как показано ниже: Сначала вы разбиваете строку на запятую, как показано в вашем примере. Я предполагаю, что это ваш случай.Затем, если split возвращает список с пустой строкой, функция возвращает 0, в противном случае возвращает длину списка со словами.

pd.Series(['mytext', '']).str.split(',').apply(lambda x: 0 if x==[''] else len(x))

...