首页 > 解决方案 > 如果存在 YYYY,则 Python 保留行,否则删除该行

问题描述

我有一个包含 Date 列的数据框,我想从 Date 列中删除那些没有 YYYY(例如,2018,它可以是任何年份)格式的行。我曾使用正则表达式的 apply 方法但不起作用,

df[df.Date.apply(lambda x: re.findall(r'[0-9]{4}', x))]

Date 列可以具有以下值,

12/3/2018
March 12, 2018
stackoverflow
Mar 12, 2018
no date text
3/12/2018

所以这里的输出应该是

12/3/2018
March 12, 2018
Mar 12, 2018
3/12/2018

标签: pythonregexdatedataframelambda

解决方案


这是一种方法。与pd.to_datetime_errors="coerce"

前任:

import pandas as pd
df = pd.DataFrame({"Col1": ['12/3/2018', 'March 12, 2018', 'stackoverflow', 'Mar 12, 2018', 'no date text', '3/12/2018']})
df["Col1"] = pd.to_datetime(df["Col1"], errors="coerce")
df = df[df["Col1"].notnull()]
print(df)

输出:

        Col1
0 2018-12-03
1 2018-03-12
3 2018-03-12
5 2018-03-12

或者,如果您想保留原始数据

import pandas as pd

def validateDate(d):
    try:
        pd.to_datetime(d)
        return d
    except:
        return None

df = pd.DataFrame({"Col1": ['12/3/2018', 'March 12, 2018', 'stackoverflow', 'Mar 12, 2018', 'no date text', '3/12/2018']})
df["Col1"] = df["Col1"].apply(validateDate)
df.dropna(inplace=True)
print(df)

输出:

             Col1
0       12/3/2018
1  March 12, 2018
3    Mar 12, 2018
5       3/12/2018

推荐阅读