在Python中使用pandas解析YYYYMMDD和HH在单独列中的日期

2024-05-16 23:43:08 发布

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

我有一个与csv文件和解析datetime相关的简单问题。

我有一个csv文件,如下所示:

YYYYMMDD, HH,    X
20110101,  1,   10
20110101,  2,   20
20110101,  3,   30

我想使用pandas(read_csv)来读取它,并将它放在一个由datetime索引的数据帧中。到目前为止,我试图实现以下目标:

import pandas as pnd
pnd.read_csv("..\\file.csv",  parse_dates = True, index_col = [0,1])

我得到的结果是:

                         X
YYYYMMDD    HH            
2011-01-01 2012-07-01   10
           2012-07-02   20
           2012-07-03   30

正如您在将HH转换为其他日期时看到的parse_日期一样。

有没有一种简单有效的方法可以将列“YYYYMMDD”与列“HH”正确组合起来,从而得到类似的结果?以下内容:

                      X
Datetime              
2011-01-01 01:00:00  10
2011-01-01 02:00:00  20
2011-01-01 03:00:00  30

提前谢谢你的帮助。


Tags: 文件csv数据import目标pandasreaddatetime
2条回答

如果将列表传递给index_col,则意味着您希望从列表中的列创建层次索引。

此外,parse_dates关键字可以设置为True或list/dict。如果为True,则尝试将单个列作为日期进行分析,否则将组合列以分析单个日期列。

总之,您要做的是:

from datetime import datetime
import pandas as pd
parse = lambda x: datetime.strptime(x, '%Y%m%d %H')
pd.read_csv("..\\file.csv",  parse_dates = [['YYYYMMDD', 'HH']], 
            index_col = 0, 
            date_parser=parse)

我一直在做这个,所以我测试了不同的速度。 我发现的最快速度如下,大约比Chang She的解决方案快3倍,至少在我的情况下,考虑到文件解析和日期解析的总时间:

首先,使用pd.read_csv解析数据文件,而不解析日期。我发现它使文件读起来慢了很多。确保CSV文件的列现在是dataframe df中的列。然后:

format = "%Y%m%d %H"
times = pd.to_datetime(df.YYYYMMDD + ' ' + df.HH, format=format)
df.set_index(times, inplace=True)
# and maybe for cleanup
df = df.drop(['YYYYMMDD','HH'], axis=1)

相关问题 更多 >