如何识别 pandas 数据框中的哪些列只有日期或只有时间?
how to identify which columns in pandas dataframe are only date or only time?
我正在编写一个试图识别列类型的函数。具体来说,它应该能够判断该列是只有日期类型还是只有时间类型。我根据堆栈溢出的答案尝试了以下代码,但它无法识别并且总是遇到 except 块。以下是示例数据框。我在 Dob 列上尝试了 运行 函数,它 returns ''its not a datefield'
def check(col):
try:
dt = pd.to_datetime(df[col])
if (dt.dt.floor('d') == dt).all():
return ('Its a pure date field')
elif (dt.dt.date == pd.Timestamp('now').date()).all():
return ('Its a pure time field')
else:
return ('Its a Datetime field')
except:
return ('its not a datefield')
可重现的输入数据帧:
df = pd.DataFrame({'Name': {0: 'Son', 1: 'Daughter', 2: 'Daughter2', 3: 'Mummy', 4: 'Daddy'}, 'Dob': {0: Timestamp('1986-01-05 00:00:00'), 1: Timestamp('1986-12-09 00:00:00'), 2: Timestamp('1988-07-04 00:00:00'), 3: Timestamp('1968-09-11 00:00:00'), 4: Timestamp('1965-07-02 00:00:00')}, 'Exp': {0: 2.5, 1: 13.5, 2: 24.5, 3: 35.5, 4: 46.5}, 'Time': {0: datetime.time(2, 45), 1: datetime.time(1, 45), 2: datetime.time(1, 45), 3: datetime.time(2, 45), 4: datetime.time(2, 55)}, 'Code': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}})
使用提供的示例对我来说工作正常,但是我修改了函数以将系列作为输入以确保不依赖全局 df
对象。
def check(s):
try:
dt = pd.to_datetime(s)
if (dt.dt.floor('d') == dt).all():
return ('Its a pure date field')
elif (dt.dt.date == pd.Timestamp('now').date()).all():
return ('Its a pure time field')
else:
return ('Its a Datetime field')
except:
return ('its not a datefield')
check(df['Dob'])
输出:'Its a pure date field'
我正在编写一个试图识别列类型的函数。具体来说,它应该能够判断该列是只有日期类型还是只有时间类型。我根据堆栈溢出的答案尝试了以下代码,但它无法识别并且总是遇到 except 块。以下是示例数据框。我在 Dob 列上尝试了 运行 函数,它 returns ''its not a datefield'
def check(col):
try:
dt = pd.to_datetime(df[col])
if (dt.dt.floor('d') == dt).all():
return ('Its a pure date field')
elif (dt.dt.date == pd.Timestamp('now').date()).all():
return ('Its a pure time field')
else:
return ('Its a Datetime field')
except:
return ('its not a datefield')
可重现的输入数据帧:
df = pd.DataFrame({'Name': {0: 'Son', 1: 'Daughter', 2: 'Daughter2', 3: 'Mummy', 4: 'Daddy'}, 'Dob': {0: Timestamp('1986-01-05 00:00:00'), 1: Timestamp('1986-12-09 00:00:00'), 2: Timestamp('1988-07-04 00:00:00'), 3: Timestamp('1968-09-11 00:00:00'), 4: Timestamp('1965-07-02 00:00:00')}, 'Exp': {0: 2.5, 1: 13.5, 2: 24.5, 3: 35.5, 4: 46.5}, 'Time': {0: datetime.time(2, 45), 1: datetime.time(1, 45), 2: datetime.time(1, 45), 3: datetime.time(2, 45), 4: datetime.time(2, 55)}, 'Code': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}})
使用提供的示例对我来说工作正常,但是我修改了函数以将系列作为输入以确保不依赖全局 df
对象。
def check(s):
try:
dt = pd.to_datetime(s)
if (dt.dt.floor('d') == dt).all():
return ('Its a pure date field')
elif (dt.dt.date == pd.Timestamp('now').date()).all():
return ('Its a pure time field')
else:
return ('Its a Datetime field')
except:
return ('its not a datefield')
check(df['Dob'])
输出:'Its a pure date field'