我正在进行一个项目,在该项目中,我在数据帧中导入SQLite数据库,然后使用以下方法将字符串日期转换为日期
toCorrect = ["dt_ocurred", "init_action_ship_dt","target_dt", "final_action_ship_dt", "done_dt",
"update_dt", "ext_dt", "PSC_picdt", "PSC_info2ownr_dt", "PSC_info2chrtr_dt", "PSC_info2rtshp_dt",
"PSC_info2oilmaj_dt", "PSC_info2mmstpmgmt_dt", "PSC_sndr_offimport_dt"]#
for someCol in toCorrect:
df_data[someCol] = pd.to_datetime(df_data[someCol],errors='coerce').apply(lambda x: x.date())
转换完成后,我将尝试获取当前年份的数据,其中我有以下查询
curr_year = datetime.datetime.now().year
df_currDRS = df_rawData.query(
f"ship_name == '{shipName}' and (dt_ocurred.str.contains('{curr_year}') or done_dt.str.contains"
f"('{curr_year}') or status.str.contains('OPEN'))", engine='python')
由于某种原因,我搞不懂这个错误。
AttributeError: Can only use .str accessor with string values!
Traceback:
File "c:\users\sshukla\documents\drs2022\venv\lib\site-packages\streamlit\scriptrunner\script_runner.py", line 443, in _run_script
exec(code, module.__dict__)
File "C:\Users\sshukla\Documents\DRS2022\main.py", line 22, in <module>
make_NewDRS()
File "C:\Users\sshukla\Documents\DRS2022\GetNewDRS.py", line 39, in make_NewDRS
df_currDRS = df_rawData.query(
File "c:\users\sshukla\documents\drs2022\venv\lib\site-packages\pandas\core\frame.py",
如果不将字符串日期转换为date对象,则查询运行良好。但是,如果日期已经从字符串转换到日期,我想知道如何构造查询。
任何帮助都将不胜感激。
发布于 2022-04-26 22:19:26
如果要筛选给定年份(例如2022年)的日期列,可以检查它是否介于一年的第一天和最后一天之间:
df.query(f"20220101 <= my_date <= 20221231")
应用于您的代码示例,如下所示:
curr_year = datetime.datetime.now().year
df_currDRS = df_rawData.query(
f"ship_name == '{shipName}' and ("
f"({curr_year}0101 <= dt_ocurred <= {curr_year}1231) or "
f"({curr_year}0101 <= done_dt <= {curr_year}1231) or "
f"status.str.contains('OPEN'))", engine='python')
https://stackoverflow.com/questions/72008984
复制