0

Last week the below code worked well to convert timestamp to string within a 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')

Today, no changes to libraries or other parts of the code, I have the error:

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

I noticed that directly from the shell there is no problem:

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

After some tentatives I solved modifying the code as below:

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']

The problem apparently is the direct assignment of the df_string to the previous df_timestamp column.

Is that normal or do you see a better solution to avoid the error ?

1 Answer 1

1

I think the problem is that the type of your column is a Timestamp and you try to add a string to it. pandas tries to convert the string to a Timestamp, but it is unable to do so. In order to change both the values and the data type in one go, I'd recommend using a vectorized solution:

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

Output:

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.