我试图将刻度数据转换为OHLC
数据,我的代码如下所示:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import mpl_finance
from datetime import *
import os
dateparse = lambda x: pd.datetime.strptime(x, '%Y/%m/%d %H:%M:%S')
file_dir = "D:/USDJPY 2017-2018/"
#directory
for root, dirs, files in os.walk(file_dir):
file_list = files
file_list.sort()
df_all = pd.read_csv(file_dir + file_list[0], parse_dates=['RateDateTime'], index_col='RateDateTime',date_parser=dateparse)
for file in file_list:
if file != file_list[0]:
df_all = df_all.append(pd.read_csv(file_dir + file, parse_dates=['RateDateTime'], index_col='RateDateTime',date_parser=dateparse))
grouped = df_all.groupby('CurrencyPair')
ask = grouped['RateAsk'].resample('1440Min').ohlc()
bid = grouped['RateBid'].resample('1440Min').ohlc()
a=pd.concat([ask, bid], axis=1, keys=['RateAsk', 'RateBid'])
a.to_csv('C:/Users/lenovo/Desktop/USDJPY 2017-2018 1DAY sorted.csv')
print('Conversion complete')
但是,转换后的数据中有空单元格,如代码片段所示: Sorted data snippet
如您所见,有些空的单元格在几天中没有可用的数据。我想删除第9行和第16行等行,但我不希望Python删除第3行,因为它是标题行之一。我尝试过
a['Open'].replace('', np.nan, inplace=True)
a.dropna(subset=['Open'], inplace=True)
但是Python返回了我:
文件“ pandas_libs \ hashtable_class_helper.pxi”,行1500,位于pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError:'打开'
我应该怎么做?当它们都堆叠有两个标头时,如何引用列C
和G
来计算价差?请帮忙!非常感谢!
答案 0 :(得分:1)
有MultiIndex
,因此必须通过以下方式展平列名:
a = pd.concat([ask, bid], axis=1, keys=['RateAsk', 'RateBid'])
a.columns = a.columns.map('_'.join)
然后使用boolean indexing
来按列RateAsk_open
过滤所有非空行和非NaN行:
a = a[(a['RateAsk_open'] != '') | (a['RateAsk_open'].notnull()]
但是如果要删除缺少所有元素的行:
a = a.dropna(how='all')