我是StackOverflow和pandas的新手。我正在尝试使用以下格式读取包含股票市场仓库数据的大型CSV文件:
date,time,open,high,low,close,volume,splits,earnings,dividends,sym
20130625,715,49.2634,49.2634,49.2634,49.2634,156.293,1,0,0,JPM
20130625,730,49.273,49.273,49.273,49.273,208.39,1,0,0,JPM
20130625,740,49.1866,49.1866,49.1866,49.1866,224.019,1,0,0,JPM
20130625,745,49.321,49.321,49.321,49.321,208.39,1,0,0,JPM
20130625,750,49.3306,49.369,49.3306,49.369,4583.54,1,0,0,JPM
20130625,755,49.369,49.369,49.369,49.369,416.78,1,0,0,JPM
20130625,800,49.369,49.369,49.3594,49.3594,1715.05,1,0,0,JPM
20130625,805,49.369,49.369,49.3306,49.3306,1333.7,1,0,0,JPM
20130625,810,49.3306,49.3786,49.3306,49.3786,1567.09,1,0,0,JPM
我有以下代码将其读入Pandas中的DataFrame
import numpy as np
import scipy as sp
import pandas as pd
import datetime as dt
fname = 'bindat.csv'
df = pd.read_csv(fname, header=0, sep=',')
问题是日期和时间列是作为int64读入的。我想将这两个时间戳合并为一个时间戳,例如:2013-06-25 07:15:00。
我正在努力使用正确的时间阅读:
df['date'] = pd.to_datetime(df['date'].astype(str))
df['time'] = pd.to_datetime(df['time'].astype(str))
第一个命令可以转换,但时间似乎很奇怪。
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 9999 entries, 0 to 9998
Data columns (total 11 columns):
date 9999 non-null datetime64[ns]
time 9999 non-null object
open 9999 non-null float64
high 9999 non-null float64
low 9999 non-null float64
close 9999 non-null float64
volume 9999 non-null float64
splits 9999 non-null float64
earnings 9999 non-null int64
dividends 9999 non-null float64
sym 9999 non-null object
dtypes: datetime64[ns](1), float64(7), int64(1), object(2)None
然后我想要合并到一个DatetimeIndex。
非常感谢任何建议。
干杯!
答案 0 :(得分:6)
有很多方法可以做到这一点。在read_csv
期间执行此操作的一种方法是使用parse_dates
和date_parser
参数,告诉parse_dates
组合日期和时间列并定义内联函数来解析日期:
>>> df = pd.read_csv("bindat.csv", parse_dates=[["date", "time"]],
date_parser=lambda x: pd.to_datetime(x, format="%Y%m%d %H%M"),
index_col="date_time")
>>> df
open high low close volume splits earnings dividends sym
date_time
2013-06-25 07:15:00 49.2634 49.2634 49.2634 49.2634 156.293 1 0 0 JPM
2013-06-25 07:30:00 49.2730 49.2730 49.2730 49.2730 208.390 1 0 0 JPM
2013-06-25 07:40:00 49.1866 49.1866 49.1866 49.1866 224.019 1 0 0 JPM
2013-06-25 07:45:00 49.3210 49.3210 49.3210 49.3210 208.390 1 0 0 JPM
2013-06-25 07:50:00 49.3306 49.3690 49.3306 49.3690 4583.540 1 0 0 JPM
2013-06-25 07:55:00 49.3690 49.3690 49.3690 49.3690 416.780 1 0 0 JPM
2013-06-25 08:00:00 49.3690 49.3690 49.3594 49.3594 1715.050 1 0 0 JPM
2013-06-25 08:05:00 49.3690 49.3690 49.3306 49.3306 1333.700 1 0 0 JPM
2013-06-25 08:10:00 49.3306 49.3786 49.3306 49.3786 1567.090 1 0 0 JPM
2013-06-25 16:10:00 49.3306 49.3786 49.3306 49.3786 1567.090 1 0 0 JPM
我在最后添加了一行以确保工作时间。