Python Pandas удаляет пустые ячейки в датафрейме - PullRequest
0 голосов
/ 30 августа 2018

Я пытался преобразовать тиковые данные в 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')

Однако в моих преобразованных данных есть пустые ячейки, выглядящие как во фрагменте: Фрагмент отсортированных данных

Как видите, в некоторые дни были недоступны пустые ячейки. Я хотел бы удалить строки, такие как Строка 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: 'open'

Как мне это сделать? И как я могу процитировать столбцы C и G, чтобы рассчитать спреды, когда у них обоих наложены два заголовка? Пожалуйста помоги! Большое спасибо!

1 Ответ

0 голосов
/ 30 августа 2018

Есть MultiIndex, поэтому необходимо сгладить имена столбцов по:

a = pd.concat([ask, bid], axis=1, keys=['RateAsk', 'RateBid']) 
a.columns = a.columns.map('_'.join)

Затем используйте boolean indexing с фильтрацией всех непустых и не NaN строк по столбцу RateAsk_open:

a = a[(a['RateAsk_open'] != '') | (a['RateAsk_open'].notnull()]

Но если вы хотите удалить строки, в которых отсутствуют все элементы:

a = a.dropna(how='all')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...