【问题标题】:Load a Panda Dataframe with timestamp columns having blank values into Teradata将带有具有空白值的时间戳列的 Panda Dataframe 加载到 Teradata
【发布时间】:2020-01-26 07:19:39
【问题描述】:

我有一个带有时间戳列 (datetime64) 的数据框。我有一个虚拟值 1900-01-01 00:00:00 需要转换为空格。当我这样做并将 df 推送到 teradata 时,它会引发 Invalid Timestamp 错误:

#Replacing 4 timestamp columns having dummy value with blank spaces
df[ts_cols[dt]]=df[ts_cols[dt]].astype(str).str.strip().replace('1900-01-01 00:00:00','')
# Converting other null columns to blanks
df=df.astype(object).where(pd.notnull(df),'')

print(type(df2['timestamp_col1']))

It gives me <class 'pandas.core.series.Series'> 

如何成功地将虚拟值转换为空白并将数据帧推送到 teradata 中具有 timestamp(0) 数据类型的现有表?

【问题讨论】:

  • 您不能将空字符串转换为时间戳。假设您的列被定义为可为空的,Teradata 将接受空值。
  • @Andrew 我不确定我是否完全理解。问题是如果我上传带有 1900-01-01 00:00:00 之类的虚拟日期的 df,teradata 会识别该字符串并将其转换为时间戳。但是,如果我将此日期转换为空白值,它不会忽略它。我在 python 中使用 Teradata 模块。不确定当数据帧到 teradata 时是否有参数忽略空值
  • 如果我正确阅读了您的帖子,在 pandas 中,您将用 ''(空字符串)替换值 '1900-01-01 00:00:00'。然后,您尝试将该值插入时间戳列。您不能在时间戳列中插入空字符串。
  • @Andrew 这是正确的,我明白这一点。有没有办法避免这种情况?我不希望我的表有这个虚拟日期值。
  • 如果您的目标列可以为空,您可以插入一个空值。不过,我不能告诉你如何在 Pandas 中做到这一点。也许用 NaN 替换虚拟值?如果您的目标列不可为空,则必须插入合法的时间戳。

标签: python pandas teradata


【解决方案1】:

以下是我处理缺失日期的方法:

我将虚拟日期转换为 NaT 值。

#Replacing 4 timestamp columns having dummy value with blank spaces
df[ts_cols[dt]]=df[ts_cols[dt]].astype(str).str.strip().replace('1900-01-01 00:00:00',pd.NaT)
#Put in None for Teradata to read null values
        df=df.where((pd.notnull(df)),None)

带有时间戳值的数据帧是对象数据类型,但在加载到 teradata 时,您可以在快速加载脚本中分配时间戳 (0) 或时间戳 (6),并在通过 teradata 模块加载数据之前创建一个表。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多