使用Pandas拆分日期时间列并清理指定时段重复数据的方法问询
数据集日期时间拆分与过滤完整实现方案
以下用Python Pandas实现你需要的所有操作,步骤清晰可直接复用:
1. 示例数据准备
先模拟你的原始数据集(实际使用时替换成pd.read_csv等加载你真实数据的代码):
import pandas as pd data = { 'CreatedDate': ['1/1/2023 0:00', '1/1/2023 0:10', '2/5/2022 14:30', '1/1/2023 0:00'], 'ClosedDate': ['1/13/2023 12:43', '1/6/2023 10:43', '2/5/2022 14:30', '1/1/2023 0:00'] } df = pd.DataFrame(data)
2. 拆分日期与时间列
按空格拆分原始的日期时间字符串,拆分后重命名时间列(推荐用TimestampCreated、TimestampClosed作为列名,简洁直观):
# 拆分CreatedDate列,替换原列为日期部分,新增时间列 df[['CreatedDate', 'TimestampCreated']] = df['CreatedDate'].str.split(' ', expand=True) # 拆分ClosedDate列,替换原列为日期部分,新增时间列 df[['ClosedDate', 'TimestampClosed']] = df['ClosedDate'].str.split(' ', expand=True)
执行后数据集就会变成你需要的格式:日期列单独存放,时间列拆分独立。
3. 删除日期完全相同的行
直接筛选CreatedDate和ClosedDate字符串不相等的行:
df = df[df['CreatedDate'] != df['ClosedDate']]
4. 保留2023年全年数据
为了准确筛选年份,先把日期列转换成datetime类型,再进行筛选:
# 转换日期列为datetime格式,方便年份判断 df['CreatedDate_dt'] = pd.to_datetime(df['CreatedDate'], format='%m/%d/%Y') df['ClosedDate_dt'] = pd.to_datetime(df['ClosedDate'], format='%m/%d/%Y') # 筛选创建日期和关闭日期都在2023年的行 df = df[(df['CreatedDate_dt'].dt.year == 2023) & (df['ClosedDate_dt'].dt.year == 2023)] # 可选:删除临时生成的datetime列(如果不需要保留) df = df.drop(['CreatedDate_dt', 'ClosedDate_dt'], axis=1)
如果不想转换类型,也可以用字符串匹配筛选(但转换datetime格式更可靠,能避免日期格式异常的情况):
df = df[df['CreatedDate'].str.endswith('/2023') & df['ClosedDate'].str.endswith('/2023')]
完整代码整合
import pandas as pd # 加载数据集(替换成你的真实数据加载逻辑) data = { 'CreatedDate': ['1/1/2023 0:00', '1/1/2023 0:10', '2/5/2022 14:30', '1/1/2023 0:00'], 'ClosedDate': ['1/13/2023 12:43', '1/6/2023 10:43', '2/5/2022 14:30', '1/1/2023 0:00'] } df = pd.DataFrame(data) # 拆分日期与时间列 df[['CreatedDate', 'TimestampCreated']] = df['CreatedDate'].str.split(' ', expand=True) df[['ClosedDate', 'TimestampClosed']] = df['ClosedDate'].str.split(' ', expand=True) # 删除日期完全相同的行 df = df[df['CreatedDate'] != df['ClosedDate']] # 筛选2023年数据 df['CreatedDate_dt'] = pd.to_datetime(df['CreatedDate'], format='%m/%d/%Y') df['ClosedDate_dt'] = pd.to_datetime(df['ClosedDate'], format='%m/%d/%Y') df = df[(df['CreatedDate_dt'].dt.year == 2023) & (df['ClosedDate_dt'].dt.year == 2023)] df = df.drop(['CreatedDate_dt', 'ClosedDate_dt'], axis=1) print(df)
执行后输出结果:
CreatedDate TimestampCreated ClosedDate TimestampClosed 0 1/1/2023 0:00 1/13/2023 12:43 1 1/1/2023 0:10 1/6/2023 10:43
内容的提问来源于stack exchange,提问作者Jerry Fany
相关产品推荐
相关产品推荐

