0

上周,以下代码可以很好地将时间戳转换为 DataFrame 中的字符串:

df.at[i, 'VB12.GMA_DOC']
Timestamp('2022-01-12 00:00:00')

len_df = len(df.index)
df['GMA_DOC'] = ''
for i in range(0,len_df):
    df.at[i, 'VB12.GMA_DOC'] = df.at[i, 'VB12.GMA_DOC'].strftime('%Y-%m-%d')

今天,没有更改库或代码的其他部分,我有错误:

ValueError: cannot set a Timestamp with a non-timestamp str

我注意到直接从shell没有问题:

df.at[i, 'VB12.GMA_DOC'].strftime('%Y-%m-%d')
'2022-01-12'

经过一些尝试后,我解决了修改代码如下:

len_df = len(df.index)
df['GMA_DOC'] = ''
for i in range(0,len_df):
    df.at[i, 'GMA_DOC'] = df.at[i, 'VB12.GMA_DOC'].strftime('%Y-%m-%d')
del  df['VB12.GMA_DOC']
df['VB12.GMA_DOC'] = df['GMA_DOC']
del  df['GMA_DOC']

问题显然是将 df_string 直接分配给前一个 df_timestamp 列。

这是正常的还是您看到更好的解决方案来避免错误?

4

1 回答 1

0

我认为问题在于您的列的类型是 aTimestamp并且您尝试向其中添加一个字符串。pandas尝试将字符串转换为 a Timestamp,但它无法这样做。为了一次性更改值和数据类型,我建议使用矢量化解决方案:

import pandas as pd

# Create dataframe with the timestamp values
df = pd.DataFrame(data=[{'VB12.GMA_DOC':'2022-01-12 00:00:01'}, {'VB12.GMA_DOC':'2022-01-11 00:00:00'}])
df['VB12.GMA_DOC'] = pd.to_datetime(df['VB12.GMA_DOC'], format="%Y-%m-%d %H:%M:%S")
print(df.dtypes) # datetime64[ns]


# Change timestamps to str
df['VB12.GMA_DOC'] = df['VB12.GMA_DOC'].dt.strftime('%Y-%m-%d')
print(df.dtypes) # object

df

输出:

VB12.GMA_DOC
0   2022-01-12
1   2022-01-11

于 2022-01-24T13:28:07.443 回答