我正在使用pd.read_csv()读取csv文件
数据包含财务OHLC时间序列,即小时数据。 日期和小时是用,分隔的值。
现在我有两个系列,一个用于日期,一个用于小时。 有没有办法在一个系列中使用两个值,这样我就可以将整个对象转换为datetime对象。
read方法应该跳过第一个逗号,并使用两个第一个(日期和小时)值存储在一系列中,以用作索引。
df = pd.read_csv (csvpath, names=['Date', 'Hour', 'Open_Price','High_Price','Low_Price','Close_Price'], usecols=[0,1,2,3,4,5])
df['Date'] = pd.to_datetime(df.Date)
我尝试将小时数据转换为日期时间对象,但现在它正在为其分配与实际数据不匹配的日期。
谢谢
答案 0 :(得分:1)
这可能是从CSV中解析日期格式的问题。
to_datetime
接受一个format
参数,您应该根据从CSV中读取的日期格式创建一个字符串。请注意,当您关闭此参数时,to_datetime
将尽最大努力来猜测您要解析的日期的格式。以下是有关如何创建格式字符串的参考:http://strftime.org/
举一个简单的例子:如果您的日期看起来像02-12-19
,则可以使用:pd.to_datetime(df.Date, format='%m-%d-%y')
答案 1 :(得分:0)
通过创建一个新的csv然后使用熊猫读取它来解决它。
def csv_edit(csv_in, csv_out):
# Reads in first two columns (Dates and hours)
Date, Hour = np.loadtxt (csv_in, dtype = 'str', delimiter = ',', unpack = True, usecols=[0,1])
# Reads in ohlc data
df = pd.read_csv(csv_in, delimiter = ',', names=['Open_Price','High_Price','Low_Price','Close_Price'], usecols = [2,3,4,5])
# Combines dates and hours to one series
df['Date'] = [x + '.' + y for x, y in zip(Date, Hour)]
# Sets index to Date
df.set_index('Date', inplace=True)
# Writes to new csv
df.to_csv(csv_out)