Как использовать функцию try для нескольких строк текста в python pandas - PullRequest
1 голос
/ 07 августа 2020

Привет, я каждый день очищаю текст веб-сайта в виде фрейма данных в python, и у меня есть строка кода, которая ищет номер индекса в первый раз Day n появляется:

Scrape example 1:
Text
acb
xyz
Day 1
hij
mno

Scrape example 2
Text
acb
xyz
Day 4
hij
mno

мой код для этого:

 startrow = df.index[df['Text'].str.startswith(('Day 1', 'Day 1:'))].item()

, но я сталкиваюсь с проблемами (value error), когда первый экземпляр - это День 2+ (например, пример 2 со сбоем).

Должен ли я использовать функцию try для поиска Day 1, а если не Day 2, Day 3 et c, или есть лучший способ сделать это? Максимальное значение будет Day 12. И если да, можете ли вы поместить try внутрь другого try или есть более эффективные способы сделать это?

Любая помощь будет оценена! Спасибо

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Проблема в том, что вы вызываете .item(), даже если не знаете, присутствует ли Day 1 в текущем фрейме данных очистки. Вместо этого вы можете перебирать диапазон дней (если вы знаете, что максимум будет 12), что-то вроде:

for i in range(1, 13):
    day_i_rows = df[df['Text'].str.startswith(f'Day {i}')]
    if len(day_i_rows) > 0:
        start_day_i_index = day_i_rows.index.item()
0 голосов
/ 07 августа 2020

Попробуйте с

from natsort import index_natsorted
s=df.loc[df['Text'].str.startswith(('Day ')),'Text']
s.index[np.array(index_natsorted(s))==0]
Out[41]: Int64Index([2], dtype='int64')

Входной фрейм данных

df
Out[42]: 
    Text
0  Day 4
1    xyz
2  Day 1
3    hij
4    mno
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...