使用 pandas 索引 csv 文件中的日期时间列

Posted

技术标签:

【中文标题】使用 pandas 索引 csv 文件中的日期时间列【英文标题】:Indexing the datetime column in the csv file using pandas 【发布时间】:2012-10-16 08:54:21 【问题描述】:

我想使用 pandas 对 csv 文件中包含日期时间类型的列进行切片。

提前致谢。

例如:data.csv

Country,Player,Runs,ScoreRate,MatchDate,Weekday
Afghanistan,Mohammad Shahzad,118,97.52,16-02-2010,Tue
india,schin,112,98.02,16-03-2010,wed

我想对包含日期时间格式的列进行切片。

【问题讨论】:

@bmu data.dtypes[data.dtypes == pandas.datetime].index 但它列出了所有列。如果你对浮点数或字符串尝试相同的方法,它会返回所需的浮点数或字符串列 那么你应该在你的问题中发布这个(你可以编辑它)。如果您也可以提供一些示例数据,那将会很有帮助。 【参考方案1】:

如果我正确理解您的问题,您可以这样做:

from pandas import *

读入数据,按MatchDate索引:

frame=read_csv("dates.csv",  parse_dates = True, index_col = 4)
print frame

                Country            Player  Runs  ScoreRate Weekday
MatchDate                                                         
2010-02-16  Afghanistan  Mohammad Shahzad   118      97.52     Tue
2010-03-16        india             schin   112      98.02     wed

定义两个日期时间对象来定义你想要切片的范围:

x=datetime(2010, 1, 5)
y=datetime(2010, 2, 25)

并对其进行切片(获取所有在xy 之间具有MatchDate 的行):

print frame.ix[x:y]
                Country            Player  Runs  ScoreRate Weekday
MatchDate                                                         
2010-02-16  Afghanistan  Mohammad Shahzad   118      97.52     Tue

如果你只想得到某个月份或年份,你可以这样做:

frame.ix['2010-2']

            Country            Player  Runs  ScoreRate Weekday
MatchDate                                                         
2010-02-16  Afghanistan  Mohammad Shahzad   118      97.52     Tue

【讨论】:

谢谢,这很有帮助但是,如果我们不知道第 4 列包含日期时间值怎么办。我想从 csv 中分割日期时间类型列。 我不确定我是否理解。您的意思是,您只想读取具有特定日期时间值的行吗?为此,您仍然需要知道哪一列包含数据时间对象。【参考方案2】:

我打算在文件阅读器中添加一个usecols 选项,以读取各个列。可能适用于 pandas 0.10(本月晚些时候)

【讨论】:

以上是关于使用 pandas 索引 csv 文件中的日期时间列的主要内容,如果未能解决你的问题,请参考以下文章

如何从导入的 csv 文件中索引日期时间列 - pandas

Pandas:使用 Unix 纪元时间戳作为日期时间索引

Python pandas - 将具有多个日期索引的csv合并到单个日期索引

如何解决 Pandas 代码中的日期时间错误?

Pandas:使用循环和分层索引将多个 csv 文件导入数据帧

使用 pandas 读取“csv”文件时解析日期时间