Python: заменить строку в кадре данных / столбце, если в строке только 1 слово - PullRequest
0 голосов
/ 03 декабря 2018

У меня довольно грязные данные, я пытаюсь заменить строки, которые могут содержать только 1 слово или строку, на '' или пустую строку.

Вот исходные данные:

df = pd.DataFrame({'some_text': [
        'I enjoy read Mark Twain\'s Books',
        'Library is very useful',
        '/',
        '\\',
        '/ /',
        '',
        'I enjoy read Mark Twain\'s Books',
        'an',
        'the',
        'Books are interesting'
]})

Я пробовал это: (это отбрасывание строк).Я не хочу сбрасывать строки, просто заменить его.

count = df['some_text'].str.split().str.len()
df[~(count==1)]

Необходим конечный результат:

I enjoy read Mark Twain's Books
Library is very useful


/ /

I enjoy read Mark Twain's Books


Books are interesting

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Вы можете использовать простое регулярное выражение здесь:

df['new_text'] = df['some_text'].str.replace('^\S+$','');
>>> df
                         some_text                         new_text
0  I enjoy read Mark Twain's Books  I enjoy read Mark Twain's Books
1           Library is very useful           Library is very useful
2                                /                                 
3                                \                                 
4                              / /                              / /
5                                                                  
6  I enjoy read Mark Twain's Books  I enjoy read Mark Twain's Books
7                               an                                 
8                              the                                 
9            Books are interesting            Books are interesting
0 голосов
/ 03 декабря 2018

В реализованной вами реализации вместо отбрасывания строк присвойте новое значение следующим образом:

count = df['some_text'].str.split().str.len()
df[count == 1] = ""
0 голосов
/ 03 декабря 2018

Вы можете применить преобразование к столбцу без маски:

df['replaced_text'] = df['some_text'].apply(lambda x: '' if len(x.strip().split()) == 1  else x) 
print(df.to_string())
df
>>

                         some_text                    replaced_text
0  I enjoy read Mark Twain's Books  I enjoy read Mark Twain's Books
1           Library is very useful           Library is very useful
2                                /                                 
3                                \                                 
4                              / /                              / /
5                                                                  
6  I enjoy read Mark Twain's Books  I enjoy read Mark Twain's Books
7                               an                                 
8                              the                                 
9            Books are interesting            Books are interesting

Очень похоже на то, что вы применили, лямбда-функция проверяет каждую строку с вырезанными пробелами, длина которых равна 1, и заменяет ее на''.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...