我有一个与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)
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)