I am reading a csv file with German date format. Seems like it worked ok in this post:
Picking dates from an imported CSV with pandas/python
However, it seems like in my case the date is not recognized as such. I could not find any wrong string in the test file.
import pandas as pd
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
from matplotlib import style
from pandas import DataFrame
style.use('ggplot')
df = pd.read_csv('testdata.csv', dayfirst=True, parse_dates=True)
df[:5]
This results in:
So, the Column with the dates is not recognized as such. What am I doing wrong here? Or is this date format simply not compatible?
If you use parse_dates=True
then read_csv
tries to parse the index as a date.
Therefore, you would also need to declare the first column as the index with index_col=[0]
:
In [216]: pd.read_csv('testdata.csv', dayfirst=True, parse_dates=True, index_col=[0])
Out[216]:
morgens mittags abends
Datum
2015-03-16 382 452 202
2015-03-17 288 467 192
Alternatively, if you don't want the Datum
column to be an index, you could use
parse_dates=[0]
to explicitly tell read_csv
to parse the first column as dates:
In [217]: pd.read_csv('testdata.csv', dayfirst=True, parse_dates=[0])
Out[217]:
Datum morgens mittags abends
0 2015-03-16 382 452 202
1 2015-03-17 288 467 192
Under the hood read_csv
uses dateutil.parser.parse
to parse date strings:
In [218]: import dateutil.parser as DP
In [221]: DP.parse('16.03.2015', dayfirst=True)
Out[221]: datetime.datetime(2015, 3, 16, 0, 0)
Since dateutil.parser
has no trouble parsing date strings in DD.MM.YYYY
format, you don't have to declare a custom date parser here.
May be this will help
from datetime import datetime as dt
dtm = lambda x: dt.strptime(str(x), "%d.%m.%Y")
df["Datum"] = df["Datum"].apply(dtm)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With