【发布时间】: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 替换虚拟值?如果您的目标列不可为空,则必须插入合法的时间戳。