在 Python 和 Pandas 中使用 dd.mm.yyyy 读取 csv
Read csv with dd.mm.yyyy in Python and Pandas
我正在读取德语日期格式的 csv 文件。
似乎它在 post:
中工作正常
但是,就我而言,日期似乎无法识别。
我在测试文件中找不到任何错误的字符串。
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]
这导致:
因此,带有日期的列未被识别。
我在这里做错了什么?
还是这种日期格式根本不兼容?
- OSX 10.10.3
- 蟒蛇 conda 3.13.0
- Python 3.4.3-0
- iPython笔记本3.1.0
这可能会有帮助
from datetime import datetime as dt
dtm = lambda x: dt.strptime(str(x), "%d.%m.%Y")
df["Datum"] = df["Datum"].apply(dtm)
使用read_csv的date_parser参数传递自定义日期解析函数(用相关日期格式包装strptime的lambda)
如果您使用 parse_dates=True
,那么 read_csv
会尝试 parse the index as a date。
因此,您还需要将第一列声明为 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
或者,如果您不希望 Datum
列成为索引,您可以使用
parse_dates=[0]
明确告诉 read_csv
将第一列解析为日期:
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
在后台 read_csv
使用 dateutil.parser.parse
解析日期字符串:
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)
由于 dateutil.parser
可以毫无问题地解析 DD.MM.YYYY
格式的日期字符串,因此您不必在此处声明自定义日期解析器。
我正在读取德语日期格式的 csv 文件。 似乎它在 post:
中工作正常但是,就我而言,日期似乎无法识别。 我在测试文件中找不到任何错误的字符串。
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]
这导致:
因此,带有日期的列未被识别。 我在这里做错了什么? 还是这种日期格式根本不兼容?
- OSX 10.10.3
- 蟒蛇 conda 3.13.0
- Python 3.4.3-0
- iPython笔记本3.1.0
这可能会有帮助
from datetime import datetime as dt
dtm = lambda x: dt.strptime(str(x), "%d.%m.%Y")
df["Datum"] = df["Datum"].apply(dtm)
使用read_csv的date_parser参数传递自定义日期解析函数(用相关日期格式包装strptime的lambda)
如果您使用 parse_dates=True
,那么 read_csv
会尝试 parse the index as a date。
因此,您还需要将第一列声明为 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
或者,如果您不希望 Datum
列成为索引,您可以使用
parse_dates=[0]
明确告诉 read_csv
将第一列解析为日期:
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
在后台 read_csv
使用 dateutil.parser.parse
解析日期字符串:
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)
由于 dateutil.parser
可以毫无问题地解析 DD.MM.YYYY
格式的日期字符串,因此您不必在此处声明自定义日期解析器。