程序员们好,
我有这个程序,我需要对大数据集进行排序。
该数据集包含以下列:
连续剧 | 信息_日期 | 登录_日期 |
---|---|---|
SNXXXXXX | 2023年10月12日12:50 | 2023/12/14 14:30 |
SNXXXXXX1 | 2024年2月29日13:40 | 2024年2月10日10:00 |
SNXXXXXX4 | 日期无效 |
我需要做的是检查Info_Date或Login_date是否包含字符串
'Invalid date'
,或者检查Info_Date是否超过三个月或者Login_Date是否超过三十天。string
格式,但在其他情况下,我遇到了一个大问题,因为 NumpyArray 的每个元素是一个字符串,它不能面对 numpy.where() 中的日期时间值。 import pandas as pd
from datetime import datetime, timedelta
import time
import numpy as np
source_data = pd.read_excel("./documents/data.xlsx")
three_months_ago = datetime.now() - timedelta(days=90)
thirty_days_ago = datetime.now() - timedelta(days=30)
#Get the values that are "Invalid date"
print(source_data.iloc[
np.where(source_data["Login_Date"].values == "Invalid date")])
我尝试使用
datetime
函数将数据转换为 strptime()
格式,如下所示:format = str("%d/%m/%Y %H:%M")
print(np.where(datetime.strptime(source_data["Login_Date"], format) < thirty_days_ago))
预期输出应该是:
连续剧 | 信息_日期 | 登录_日期 |
---|---|---|
SNXXXXXX1 | 2024年2月29日13:40 | 2024年2月10日10:00 |
将原始日期保留为字符串并复制为日期时间:
# create a copy of the date columns as datetime
tmp = df[['Info_Date', 'Login_Date']].apply(pd.to_datetime,
dayfirst=True, errors='coerce')
today = pd.Timestamp('today')
# Timestamp('2024-03-14 01:23:45.678900')
# is either date invalid?
m1 = df[['Info_Date', 'Login_Date']].eq('Invalid date').any(axis=1)
# is Info_Date older than 3 months?
m2 = tmp['Info_Date'].lt(today-pd.DateOffset(months=3))
# is Login_Date older than 30 days?
m3 = tmp['Login_Date'].rsub(today).gt('30D')
df[['m1', 'm2', 'm3']] = m1, m2, m3
输出:
Serials Info_Date Login_Date m1 m2 m3
0 SNXXXXXX 10/12/2023 12:50 14/12/2023 14:30 False False True
1 SNXXXXX1 29/02/2024 13:40 10/02/2024 10:00 True False False
2 SNXXXXX4 NaN Invalid date True True False