Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dataframe with datetime64 dtype insert into to postgressql timestamp column

I am taking a dataframe and inserting it into a Postgresql table.

One column in the dataframe is a datetime64 dtype. The column type in PostgreSQL is 'timestamp without time zone.' To prepare the dataframe to insert, I am using to_records:

listdf = df.to_records(index=False).tolist()

When I run the to_records, it gives an error at the psycopg2's cur.executemany() that I am trying to insert Biginit into a Timestamp without timezone.

So I tried to add a dict of column_dtypes to the to_records. But that doesn't work. The below gives the error: "ValueError: Cannot convert from specific units to generic units in NumPy datetimes or timedeltas"

DictofDTypes = dict.fromkeys(SQLdfColHAedings,'float')
DictofDTypes['Date_Time'] = 'datetime64'
listdf = df.to_records(index=False,column_dtypes=DictofDTypes).tolist()

I have also tried type of str, int, and float. None worked in the above three lines.

How do I convert the column properly to be able to insert the column into a timestamp sql column?

like image 952
Jonathan Stearns Avatar asked Jun 14 '26 23:06

Jonathan Stearns


1 Answers

I removed defining the dtypes from to_records. And before to_recordes, I converted the datetime to str with: df['Date_Time'] = df['Date_Time'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')) The sql insert command then worked.

like image 140
Jonathan Stearns Avatar answered Jun 17 '26 15:06

Jonathan Stearns



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!