在Python和Pandas中使用dd.mm.yyyy读取csv

2024-04-29 20:16:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读取一个德国日期格式的csv文件。 在这篇文章里似乎没问题:

Picking dates from an imported CSV with pandas/python

然而,在我的情况下,日期似乎不被认为是这样。 我在测试文件中找不到任何错误的字符串。

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]

table

这将导致:

screenshot

因此,带有日期的列不被认为是这样的。 我在这里做错什么了? 或者这个日期格式不兼容?

  • OSX 10.10.3版
  • 水蟒康达3.13.0
  • Python3.4.3-0
  • iPython笔记本3.1.0

Tags: 文件csvfromimporttruepandasdfmatplotlib
1条回答
网友
1楼 · 发布于 2024-04-29 20:16:10

使用read_csv的date_parser参数传递自定义日期解析函数(用相关日期格式包装strptime的lambda)

pandas.read_csv

网友
2楼 · 发布于 2024-04-29 20:16:10

如果使用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格式的日期字符串时没有问题,所以您不必在这里声明自定义日期解析器。

网友
3楼 · 发布于 2024-04-29 20:16:10

也许这会有帮助

    from datetime import datetime as dt
    dtm = lambda x: dt.strptime(str(x), "%d.%m.%Y")
    df["Datum"] = df["Datum"].apply(dtm)

相关问题 更多 >