Удалить конкретные символы и цифры перед ним - PullRequest
0 голосов
/ 21 октября 2019
import pandas as pd
my_df = pd.DataFrame(columns = ['Energy', 'Value Energy'], 
data = [['348kcal/1476kj', '343kcal / 1451kj'], 
['2370 kj / 570 kcal', '86 kcal / 361kj'], 
['168 kcal', '110kcal464kj'], 
['1647 kj / 388 kcal', '441kcal'], 
['348 kcal1476 kj', '28kcal 121kj'], 
['86 kcal 361kj', '2370kj570kcal']])

Мой пример df выглядит следующим образом:

             Energy        Value Energy
 0      348kcal/1476kj  343kcal / 1451kj
 1  2370 kj / 570 kcal   86 kcal / 361kj
 2            168 kcal      110kcal464kj
 3  1647 kj / 388 kcal           441kcal
 4     348 kcal1476 kj      28kcal 121kj
 5       86 kcal 361kj     2370kj570kcal

В приведенном выше примере df я хотел бы удалить kj символов в строке и числе перед ним.

Я хотел бы получить следующий вывод:

              Energy      Value Energy
0             348kcal     343kcal
1            570 kcal     86 kcal
2            168 kcal     110kcal
3            388 kcal     441kcal
4            348 kcal     28kcal
5             86 kcal     570kcal

Ответы [ 3 ]

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

Вы можете определить функцию для очистки текста, а затем использовать функцию apply для столбцов. Преимущество заключается в том, что вы можете определить отдельные функции для разных столбцов в соответствии с вашими требованиями.

import pandas as pd
my_df = pd.DataFrame(columns = ['Energy', 'Value Energy'], data = [['348kcal/1476kj', '343kcal / 1451kj'], ['2370 kj / 570 kcal', '86 kcal / 361kj'], ['168 kcal', '110kcal464kj'], ['1647 kj / 388 kcal', '441kcal'], ['348 kcal1476 kj', '28kcal 121kj'], ['86 kcal 361kj', '2370kj570kcal']])

def clean(x):
    return re.search(r'(\d+\s*kcal)', x).group(0)

my_df['Energy'] = my_df['Energy'].apply(clean)
my_df['Value Energy'] = my_df['Value Energy'].apply(clean)

      Energy    Value Energy    
0   348kcal     343kcal 
1   570 kcal    86 kcal 
2   168 kcal    110kcal 
3   388 kcal    441kcal 
4   348 kcal    28kcal  
5   86 kcal     570kcal 
1 голос
/ 21 октября 2019

С определенной заменой регулярного выражения (за один проход):

In [52]: pat = re.compile(r'[\d\s/]*kj[\s/]*')                                                              

In [53]: my_df.apply(lambda s: s.str.replace(pat, ''))                                                      
Out[53]: 
     Energy Value Energy
0   348kcal      343kcal
1  570 kcal      86 kcal
2  168 kcal      110kcal
3  388 kcal      441kcal
4  348 kcal       28kcal
5   86 kcal      570kcal
0 голосов
/ 21 октября 2019

Возможно, вы захотите вызвать метод apply:

my_df.apply(lambda x: x.split('/')[0])

Должно работать на вас!

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