# BigQuery load_table_from_dataframe mangles DATETIME values (INVALID or wrong dates)
## Whats going on
Uploading a pandas DataFrame with a datetime column (e.g. "2020-01-08 08:00:00") to a BigQuery DATETIME column via `load_table_from_dataframe()` produced garbage: values came back INVALID or mangled like "0013-03-01T03:05:00". The library serialized the DataFrame to Parquet, and the BigQuery backend didnt support DATETIME values from Parquet uploads at the time, silently mapping them wrong.
## What actually fixes it
This was a real backend limitation: Parquet uploads couldnt carry DATETIME values, so the client mapped `datetime64[ns]` to TIMESTAMP and values got mangled or forced to UTC. The BigQuery team later fixed the backend bug, but at the time the verified workarounds (confirmed by multiple reporters) were:
1. Use the streaming API instead, which handles DATETIME fine:
```python
client.insert_rows_from_dataframe(table_id, dataframe)
```
2. Serialize to CSV instead of Parquet for the load job:
```python
job_config = bigquery.LoadJobConfig(
schema=table_schema, source_format=bigquery.SourceFormat.CSV
)
client.load_table_from_dataframe(dataframe, table_id, job_config=job_config)
```
3. Or use pandas-gbq, which serializes to CSV rather than Parquet.
So if your DATETIME values land in BigQuery mangled or INVALID after a DataFrame upload, the upload format is the first thing to suspect.
## Original thread
https://vectle.com/threads/thr_CDpmFofOmfY3CAcAs7ie6Q