Панды подход к фильтру Excel - PullRequest
       25

Панды подход к фильтру Excel

0 голосов
/ 28 февраля 2019

Ниже приведен пример сценария, который я запускаю в файле Excel.По существу, после строка 6 Я хочу отфильтровать строки, содержащие BFD и SFD в столбце F (я знаю, что только что присвоил эти значения в приведенном выше коде, и больше этих значений также существовало вразные строки до сценария).После этого просто примените логику в строках 7-8 к фрейму данных.Поэтому, по сути, вы используете pandas для фильтрации строк по значению ячейки в столбце, затем применяете логику к тому, что не было отфильтровано, а затем просто не фильтруете все (как если бы вы должны были очистить фильтры в Excel), и мой фрейм данных был готов к работе

import pandas as pd
import numpy as np
data = pd.read_excel("2.27.xlsm", encoding = "ISO-8859-1", dtype=object)
data.loc[data.F == 'DBD', 'F'] = 'BFD'
data.loc[data.F == 'DUB', 'F'] = 'BFD'
data.loc[data.F == 'DCD', 'F'] = 'SFD'
#Now I want to apply this logic and filter out any rows that have values of BFD or SF in column F and then apply to logic below (to not overwrite any work done above)
data.loc[data.Fm == 'B25', 'F'] = 'BFD'
data.loc[data.Fm == 'B50', 'F'] = 'BFD'

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
data.to_excel(writer, sheet_name='Sheet1')
writer.save()

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Это преобразует ваш фрейм данных в фрейм данных, содержащий ТОЛЬКО строки, в которых столбец F имеет BDF или SDF

data = data[data.F.str.contains(r'^BFD$|^SFD$', case = False, na=False)]
0 голосов
/ 01 марта 2019

Еще раз спасибо за всю помощь, это то, что я в итоге сделал.Прошу прощать, если вы считаете, что это не соответствует фильтру фильтрации Excel для элементов, которые начинаются с того, что ООН вносит коррективы, а затем очищает фильтры.

ta =  data[~data.Format.str.contains(r'UN', case = False, na=False, regex = False)] # trying regex
da = data[data.Format.str.contains(r'UN', case = False, na=False, regex = False)] # trying regex


final = pd.concat([ta, da],0) # now append seperate dataframes 
0 голосов
/ 28 февраля 2019

Не проверено, поскольку данных не предоставлено, но это должно помочь вам:

filtered = [d for d in data if d['F'] == 'BFD' or d['F'] == 'SF'] 
# now proceed with your work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...