Как пропустить остаток данных после пустой строки? - PullRequest
0 голосов
/ 13 ноября 2018

Следующая процедура извлекает файл данных.

wget.download("https://www.aaii.com/files/surveys/sentiment.xls", "C:/temp/sentiment.xls")
df = pd.read_excel("C:/temp/sentiment.xls", sheet_name = "SENTIMENT", skiprows=3, parse_dates=['Date'], date_format='%m-%d-%y', index_col ='Date')

Первые три строки данных являются неполными, поэтому я могу отрезать их следующим образом: df [3:]

Примерно в строке 1640 есть пустая строка. Я хочу пропустить остальную часть файла после этой строки. Я попытался найти эту строку примерно так и получить ее индекс, чтобы я мог сделать еще один фрагмент, но я получаю nan для значения индекса.

df[df.isnull().all(1)].index.values[0]

Как мне найти эту строку и пропустить оставшуюся часть файла?

1 Ответ

0 голосов
/ 15 ноября 2018

Я думаю, у вас есть две nan строки в этом файле:

  1. Первая строка после заголовка уже пустая строка, ведущая к индексу nan.
  2. Причина вашего поста здесь, пустая строка, в которой указывается конец интересующих вас данных.

сначала импортируйте данные, как вы это сделали:

df = pd.read_excel("sentiment.xls", sheet_name = "SENTIMENT", skiprows=3, parse_dates=['Date'], date_format='%m-%d-%y', index_col ='Date')

df.head()
                     Bullish  Neutral  Bearish   ...      High     Low   Close
Date                                             ...                          
NaN                      NaN      NaN      NaN   ...       NaN     NaN     NaN
1987-06-26 00:00:00      NaN      NaN      NaN   ...       NaN     NaN     NaN
1987-07-17 00:00:00      NaN      NaN      NaN   ...    314.59  307.63  314.59
1987-07-24 00:00:00     0.36     0.50     0.14   ...    311.39  307.81  309.27
1987-07-31 00:00:00     0.26     0.48     0.26   ...    318.66  310.65  318.66

затем удалите первую пустую строку (nan -индекс), проблема № 1 :

df = df[1:]

df.head()
                     Bullish  Neutral  Bearish   ...      High     Low   Close
Date                                             ...                          
1987-06-26 00:00:00      NaN      NaN      NaN   ...       NaN     NaN     NaN
1987-07-17 00:00:00      NaN      NaN      NaN   ...    314.59  307.63  314.59
1987-07-24 00:00:00     0.36     0.50     0.14   ...    311.39  307.81  309.27
1987-07-31 00:00:00     0.26     0.48     0.26   ...    318.66  310.65  318.66
1987-08-07 00:00:00     0.56     0.15     0.29   ...    323.00  316.23  323.00

А теперь вы хотите проиндексировать все строки перед первым nan -индексом, задача №2 .
Идея: создать логический массив с записями True для всех nan - индексов, привести к целому числу и построить накопительную сумму.Теперь у вас есть массив, который равен 0 для всех данных, которые вы хотите, и> 0 от любой нежелательной строки до конца.
Этот тест, проверенный по 0, возвращает логический индекс для ваших данных:

data_idx = df.index.isna().astype(int).cumsum() == 0

Применительно к вашему фрейму данных:

df[data_idx]
                      Bullish   Neutral   ...         Low    Close
Date                                      ...                     
1987-06-26 00:00:00       NaN       NaN   ...         NaN      NaN
1987-07-17 00:00:00       NaN       NaN   ...      307.63   314.59
1987-07-24 00:00:00  0.360000  0.500000   ...      307.81   309.27
1987-07-31 00:00:00  0.260000  0.480000   ...      310.65   318.66
1987-08-07 00:00:00  0.560000  0.150000   ...      316.23   323.00
                      ...       ...   ...         ...      ...
2018-10-11 00:00:00  0.306061  0.339394   ...     2784.86  2785.68
2018-10-18 00:00:00  0.339350  0.310469   ...     2710.51  2809.21
2018-10-25 00:00:00  0.279693  0.310345   ...     2651.89  2656.10
2018-11-01 00:00:00  0.379310  0.275862   ...     2603.54  2711.74
2018-11-08 00:00:00  0.412844  0.275229   ...     2700.44  2813.89

[1635 rows x 12 columns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...