【问题标题】:pd.read_sql formatting issue with timestamp带有时间戳的 pd.read_sql 格式问题
【发布时间】:2021-07-05 03:35:08
【问题描述】:

我正在使用以下内容从数据库中提取数据,使用 cx_Oracle.connect 进行连接。当我尝试从数据库中提取的字段是数据类型 TIMESTAMP(6) 时,我遇到了问题。

检索到的值为 1625236451324000000 而不是 02-JUL-21 02.54.05.569000 PM

df_ora = pd.read_sql(sql_query_lpi, con=md_connection)
df_list=df_ora.values.tolist()
for columnname in df_list:
    run_info = dict()
    run_info['UPDATE_TS'] = columnname[0]

pandas 需要什么特殊格式来处理这个问题?

感谢您的任何帮助/建议。

【问题讨论】:

标签: python pandas


【解决方案1】:

在将其转换为日期时间时,您需要传入 unit 参数,

pd.to_datetime(your_col, unit='ns')

In [4]: pd.Timestamp(1625236451324000000, unit='ns')
Out[4]: Timestamp('2021-07-02 14:34:11.324000')

import pandas as pd
df = pd.DataFrame({'col' : [1625236451324000000]})
df['date_col'] = pd.to_datetime(df['col'], unit='ns')

print(df)
                   col                date_col
0  1625236451324000000 2021-07-02 14:34:11.324

编辑。

如果您需要保留格式,请使用.dt.srftime,注意这会将您的时间戳转换为字符串。

 df['date_col_sql'] = pd.to_datetime(df['col'], unit='ns')\
                        .dt.strftime('%d-%b-%y %I.%M.%S.%f')


                   col                date_col               date_col_sql
0  1625236451324000000 2021-07-02 14:34:11.324  02-Jul-21 02.34.11.324000

【讨论】:

  • 谢谢奥马尔。我想保留时间戳格式的格式,即上述示例中的 02-JUL-21 02.54.05.569000 PM,以便我可以再次在查询中使用它。有没有办法做到这一点 ?谢谢。
  • @pats4u 查看编辑,抱歉,我直到现在才开始,希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2020-09-25
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
相关资源
最近更新 更多