Как показано на рисунке, у меня есть дата-схема. Пока я хочу посмотреть строки с "match" == 1. Я не уверен, как это сделать.
Конечная цель состоит в том, чтобы избавиться от тех строк, которые не соответствуют дате (могут быть представлены либо match == 0, либо match == 1)
>>> df.to_dict()
{(1, 0): '09/14/20',
(1, 1): '90792',
(2, 0): '5/18/71',
(3, 0): '8/09/19',
(4, 0): '6/05/93',
(4, 1): '90791',
(5, 0): '8/9/97',
(6, 0): '12/8/82',
(7, 0): '8/26/89',
(7, 1): '90791',
(8, 0): '10/13/95',
(8, 1): '90791',
(9, 0): '4/19/91',
(10, 0): '04/08/20',
(10, 1): '04 16',
(11, 0): '9/20/76',
(11, 1): '90801',
(12, 0): '12/08/19'}
PS: У меня есть текстовый файл, и мне пришлось извлекать дату из каждой строки файла. Так я и сделал:
import pandas as pd
doc = []
with open('dates.txt') as file:
for line in file:
doc.append(line)
df = pd.Series(doc)
df = df.str.extractall(r'(?P<Date>(([0123]?\d)|([ADFJMNOS][aceopu][a-z]
{1,}))[\s,/-]?(([0123]?\d)|([ADFJMNOS][aceopu][a-z]{1,}))[\s,/-]?(?
P<Year>(\d{2}|\d{4})))')
df.index.rename(['Id','Match'],inplace=True)
Я не уверен, что это самый эффективный способ извлечения дат (присутствующих в различных форматах) и завернутый в английские предложения, поэтому будет оценено, если кто-то может прокомментировать мою эффективность кода и краткость до сих пор. Форматы даты в текстовом файле:
04/20/2009; 04/20/09; 4/20/09; 4/3/09
Mar-20-2009; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009;
20 Mar 2009; 20 March 2009; 20 Mar. 2009; 20 March, 2009
Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009
Feb 2009; Sep 2009; Oct 2010
6/2008; 12/2009
2009; 2010
Если match
является столбцом индекса, вы используете срез индекса, чтобы получить нужные значения:
idx = pd.IndexSlice
df.loc[idx[:,1], :]
Разбивая оператор .loc
, первый аргумент для индекса, а второй - для столбцов. Поскольку у вас есть два столбца индекса, вы можете использовать список из двух элементов для выбора из каждого столбца индекса. Первый элемент :
, выбирает все элементы в первом столбце индекса. Второй выбирает только те строки со значением 1
во втором столбце индекса.
Если match
было столбец, вы могли бы сделать следующее:
df[df.match == 1]
Если вы сделаете df.match
столбец логических значений (True
/False
), вы можете просто выполнить df[df.match]
.
match
был столбец индекса. Обновлен соответственно.