我有一个数据框,如图所示。现在,我想看看'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
答案 0 :(得分:1)
如果match
是索引列,则使用index slicing来获取所需的值:
idx = pd.IndexSlice
df.loc[idx[:,1], :]
从.loc
语句开始,第一个参数用于索引,第二个参数用于列。由于您有两个索引列,因此可以使用两个项目的列表从每个索引列中进行选择。第一项:
选择第一个索引列中的所有项。第二个仅选择第二个索引列中值为1
的行。
如果match
是一列,则可以执行以下操作:
df[df.match == 1]
如果将df.match
设为一列布尔值(True
/ False
),则只需执行df[df.match]
。