首页 > 解决方案 > 如何遍历列表并在python中执行多个过滤条件

问题描述

这些数据是关于特定文件夹中的文件信息,预计会随着时间的推移而增长,这意味着会有许多具有相似名称模式的文件。但文件名并不完全相同。下面的代码捕获与给定模式匹配的文件名,如果有多个输出,则根据 last_modified 日期选择最新的一个。在这个例子中是 filename1

示例数据框:

d = {'file_name': ['finding_finding_april_040119_1012', 'finding_finding_april_040119_1111', 'question_answer_april_040119_0915', 'question_answer_april_040119_0945', 'review_rational_040119_0805'], 'No_of_records': [23, 32, 45, 42, 28 ], 'size_in_MB': [10, 15, 8, 12, 10 ], 'Last_modified': ['2019-04-01 05:00:15+00:00', '2019-04-01 05:00:20+00:00', '2019-04-01 07:00:15+00:00', '2019-04-01 07:15:15+00:00', '2019-04-01 05:00:15+00:00']}
import pandas as pd
df = pd.DataFrame(data = d)
df['Last_modified'] = pd.to_datetime(df['Last_modified'])

这是表格的样子:

在此处输入图像描述

我正在使用的代码:

mask1 = df['file_name'].str.contains("finding_finding_april")
df2 = df.loc[mask1]
mask2 = (df2['Last_modified'] == df2['Last_modified'].max())
df3 = df2.loc[mask2]
filename1 = df3.iloc[0,2]

条件 mask1、mask2 不能像 mask1 和 mask2 一样一起使用。代码按原样工作。但我认为应该有更好的方式来写这个。

  1. 有没有办法使用嵌套的 for 循环或列表理解来改进代码?
  2. 如果我有如下模式的列表,如何在列表中运行循环以创建 filename1 ,filename2 而无需为每个模式单独运行代码。

    list = ['finding_finding_april', 'question_answer_april', 'review_rational_april' ... ...]

现在我知道如何循环遍历一个列表并做一些简单的事情,但不知道在这种情况下该怎么做。

标签: pythonpandasloops

解决方案


您可以遍历列表并创建一个文件名列表,附加内容,如下所示

list = ['finding_finding_april', 'question_answer_april', 'review_rational_april']
for i in range(0,len(list)):
    mask1 = df['file_name'].str.contains(list[i])
    df2 = df.loc[mask1]
    .
    .
    filename.append(df3.iloc[0,2])

推荐阅读