python - 如果存在 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
解决方案
这是一种方法。与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
推荐阅读
- python - Python - 尝试在没有已知父包的情况下进行相对导入
- mysql - 如何在 mysql 5.7 中正确计算中位数
- java - grails 中的 JSON 查看器
- curl - 如何将参数传递给ansible uri模块?
- php - PHP在课堂上的奇怪行为
- google-sheets - 计算至少找到一次指定值的行数
- scala - 写入 csv 输出或 parquet 输出,通过配置设置控制
- r - 将列表列表转换为数据框
- javascript - 如何向刀片 Laravel json response() 显示验证消息
- json - 当你把它拿出来而不是把它带进来时,用 JSON 进行通信的标准是什么?