我有必须被视为语法问题的问题。 进行一些数据清理后,数据包含日期时间字段。 日期始终存在,但有时时间会丢失。 像这样:
3/1/2023 11:03 AM
4/8/2022 10:21 AM
7/19/2012
7/12/2021
4/16/2024 7:02 AM
所以我简单的头脑说,如果完整的冒号(:)缺少 concat 00:00。 我们就完成了。
我希望这能起作用:
dfAssetMeter_a['lastReadingDTFixed'] = dfAssetMeter_a['LASTREADINGDATE'].astype(str) if dfAssetMeter_a['LASTREADINGDATE'].astype(str).find(':') > 0 else dfAssetMeter_a['LASTREADINGDATE'].astype(str) + '00:00 AM'
没起作用
这有效:
def fixDateTime(dateStr_in):
return dateStr_in if dateStr_in.find(':') > 0 else dateStr_in + ' 12:00 AM'
dfAssetMeter_a['lastReadingDTFixed'] = dfAssetMeter_a['LASTREADINGDATE'].apply( fixDateTime )
问题:
哪种“Python”方法更正确?
在我看来,方法二在星期五、假期周末之前的三点钟会更容易理解。
拜托,我不想在这里开始一场皇家之战!
有人可以提供第一种方法的正确语法吗?
您可以将
pandas.to_datetime
与 format='mixed'
一起使用。
import pandas as pd
df = pd.DataFrame(
{
"LASTREADINGDATE": [
"3/1/2023 11:03 AM",
"4/8/2022 10:21 AM",
"7/19/2012",
"7/12/2021",
"4/16/2024 7:02 AM",
]
}
)
df["lastReadingDTFixed"] = pd.to_datetime(df["LASTREADINGDATE"], format="mixed")
LASTREADINGDATE lastReadingDTFixed
0 3/1/2023 11:03 AM 2023-03-01 11:03:00
1 4/8/2022 10:21 AM 2022-04-08 10:21:00
2 7/19/2012 2012-07-19 00:00:00
3 7/12/2021 2021-07-12 00:00:00
4 4/16/2024 7:02 AM 2024-04-16 07:02:00
无论使用什么方法都可以,只要直观即可。 但是,您可以直接使用如下方式更新数据:
df.loc[~df['time'].str.contains('\:'), 'time'] += ' 12:00AM'