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

Mau*_*cio 25 python pandas

我有一个与csv文件和解析日期时间相关的简单问题.

我有一个看起来像这样的csv文件:

YYYYMMDD, HH,    X
20110101,  1,   10
20110101,  2,   20
20110101,  3,   30
Run Code Online (Sandbox Code Playgroud)

我想用pandas(read_csv)阅读它并将它放在由datetime索引的数据帧中.到目前为止,我已尝试实现以下内容:

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

我得到的结果是:

                         X
YYYYMMDD    HH            
2011-01-01 2012-07-01   10
           2012-07-02   20
           2012-07-03   30
Run Code Online (Sandbox Code Playgroud)

正如您在将HH转换为不同日期时看到的parse_dates.

是否有一种简单有效的方法可以将"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
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

Cha*_*She 31

如果将列表传递给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)
Run Code Online (Sandbox Code Playgroud)

  • 如果您从数据框开始而不是直接从csv读取,那该怎么办? (2认同)

K.-*_*Aye 11

我一直这样做,所以我测试了不同的速度方式.我找到的最快的是以下,约.比起Chang She的解决方案快3倍,至少在我的情况下,考虑文件解析和日期解析的总时间:

首先,使用pd.read_csv解析数据文件,不解析日期.我发现它正在减慢文件读取速度.确保CSV文件的列现在是数据框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)
Run Code Online (Sandbox Code Playgroud)

  • 不起作用,我得到'不支持的操作数类型+:'numpy.ndarray'和'str'` (2认同)