Python Pandas read_csv 函数不允许将解析日期更改为所需格式

Posted

技术标签:

【中文标题】Python Pandas read_csv 函数不允许将解析日期更改为所需格式【英文标题】:Python Pandas read_csv function does not allow to change parsed dates into required format 【发布时间】:2020-08-03 01:59:09 【问题描述】:

我是 python 初学者,正在尝试使用 pandas 读取 csv 文件。问题是 csv 中的日期列具有以下格式:2020-03-12 00:00:00+00:00。在 read_csv 函数中,我想将日期格式更改为 isoformat (%Y-%m-%d)。我尝试了所有 *** 解决方案,但没有一个有效。这是我的代码:

import time
from datetime import date

url = 'https://www.arcgis.com/sharing/rest/content/items/f10774f1c63e40168479a1feb6c7ca74/data'
countries = pd.read_csv(url,
                     usecols=[2, 5, 8],
                     index_col=['Landkreis', 'Meldedatum'],
                     parse_dates=['Meldedatum'],
                     squeeze=True
                       ).sort_index()

Current result

“Meldedatum”列应该只显示日期,而不是小时和分钟。但是,我无法更改格式,因为它是一个索引列。

非常感谢您的帮助!

【问题讨论】:

2020-03-12 00:00:00+00:00 正是pandas 显示日期时间列(索引)的方式。更改格式没有意义。 注意:检查例如countries.index[0] 并且您会看到来自Meldedatum 列的第二个索引是Timestamp('2020-03-12 00:00:00+0000', tz='UTC')。由于您使用parse_dates=['Meldedatum'] 调用read_csv 并且Meldedatum 列是正确的ISO 8601 日期时间字符串,所以pandas 完成了它的工作,一切都很好;-) 【参考方案1】:

在不指定任何格式的情况下将您的 csv 正常读取到数据帧中。

然后这样做:

countries['Meldedatum'] = pd.to_datetime(countries['Meldedatum'])

这应该会给你你想要的格式。

【讨论】:

我认为 OP 的代码已经正确解析为日期时间。这只是显示事物的问题...... 此代码生成与 OP 开始时相同的表示形式。【参考方案2】:

这就是 pandas 显示 datetime 对象的方式。它始终存储小时/分钟/秒/毫秒的字段,即使它们都设置为零。您无法更改此内部表示。

但是,您可以将 datetime 对象转换为字符串,以便按照您想要的方式格式化它们的表示形式。请记住,您将失去 datetime 对象的所有功能。

您似乎想计算每天发生的次数。如果是这种情况,您应该使用groupby 对象。在这种情况下,我们不需要设置索引列或解析日期。如果您愿意,我们还可以将 datetime 对象的表示形式转换为字符串:

import time
from datetime import date 

import pandas as pd 

# get the data
url = 'https://www.arcgis.com/sharing/rest/content/items/f10774f1c63e40168479a1feb6c7ca74/data' 
countries = pd.read_csv(url, usecols=[2, 5, 8], index_col=None, squeeze=True).sort_index()
# modify dates to strings
countries['Meldedatum'] = countries.Meldedatum.astype(str).apply(lambda x: x.split('T')[0])
# group by Landkreis and Meldedatum
grouped_countries = countries.groupby(['Landkreis', 'Meldedatum']).count()

print(grouped_countries)

# output:
                               AnzahlFall
Landkreis          Meldedatum                 
LK Ahrweiler       2020-03-12           5
                   2020-03-13           2
                   2020-03-14           1
                   2020-03-16           3
                   2020-03-17           5
...                                   ...
StadtRegion Aachen 2020-04-14           8
                   2020-04-15          37
                   2020-04-16          23
                   2020-04-17          18
                   2020-04-18           5

【讨论】:

以上是关于Python Pandas read_csv 函数不允许将解析日期更改为所需格式的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas——Read_csv详解

在 Python Pandas 中使用多个字符分隔符 read_csv

详解pandas的read_csv()

pandas使用read_csv函数读取文件最后N行数据并保留表头pandas使用read_csv函数读取网络url链接数据

解决错误:pandas.read_csv() 报错 OSError: Initializing from file failed

Python Pandas 中的引擎 read_csv