Найти значение индекса первой пустой строки в пандах данных. - PullRequest
0 голосов
/ 15 мая 2018

Я читаю лист, используя панд. После прочтения листа я получаю пустую строку между значениями.

Итак, мне нужно найти значение индекса этой строки и удалить все строки ниже этого, а затем создать новый фрейм данных.

from xlrd import open_workbook

import pandas as pd

from pandas import ExcelWriter

pathbook = open_workbook("S:\\1. DIRECTORY MASTER\\FINANCIAL RESEARCH\\Data 
Initiative - PROJECTS\\Market Rollout\\"
                     "Modified Files\\2016\\2016A-3032 - CA.xlsx")
pathbook_sheet = pathbook.sheet_by_name("1-Rollout")

file = "S:\\1. DIRECTORY MASTER\\FINANCIAL RESEARCH\\Data Initiative - 
PROJECTS\\Market Rollout\\" \
   "Modified Files\\2016\\2016A-3032 - CA.xlsx"

for rowidx in range(pathbook_sheet.nrows):
    row = pathbook_sheet.row(rowidx)
    for colidx, cell in enumerate(row):
        if cell.value == "Canadian Market":
            print("Sheet Name:", pathbook_sheet.name)
            print("Row Number:", rowidx)
            CADvalue = int(rowidx)
            CADvalue += 1

print(CADvalue)
reading_book = pd.read_excel(file, sheet_name="1-Rollout", 
skiprows=CADvalue, index_col=0).iloc[:12]

write = ExcelWriter("Final" + ".xlsx")
reading_book.to_excel(write, 'Sheet1', index=False)
write.save()

Пример вывода в файл Excel, который я получаю

Sales 2016 2017 2018 2019 2020 2021 Units Sold 0 0 0 4 14 37 Unit Sale Price 1285 1285 1285 1285 1285 1285 Unit Profit 4000 4000 4000 4000 4000 4000<br> Rest of the World Market

Таким образом, между последними 3 строками есть пустая строка

Ответы [ 2 ]

0 голосов
/ 12 июня 2018
#First, find NaN entries in first column
blank_row_bool = reading_book.iloc[:,1].isna()
#Next, get index of first NaN entry
blank_row_index =  [i for i, x in enumerate(blank_row_bool) if x][0]
#Finally, restrict dataframe to rows before the first NaN entry
reading_book = reading_book.iloc[:(blank_row_index-1)]

Или в одну строку:

reading_book = reading_book.iloc[:([i for i, x in 
enumerate(reading_book.iloc[:,1].isna()) if x][0]-1)]
0 голосов
/ 15 мая 2018

Решение зависит от того, что означает пустое.Если это просто пустая строка, как в '', код для поиска индекса будет следующим:

empty = ''
idx_first_empty_row = reading_book.index[reading_book.iloc[:, 0] == empty][0]

Это работает, если первый столбец пуст.Если, например, «пусто» означает NaN, то замените строку на:

idx_first_empty_row = reading_book.index[np.isnan(reading_book.iloc[:, 0])]

. Это работает, если dtype строк - это какой-либо числовой числовой тип, например np.float64.

Если dtype не является каким-либо простым числовым типом, попробуйте следующее:

idx_first_empty_row = np.where(reading_book.iloc[:, 0].isnull().values == True)

Вы также можете, в зависимости от типов данных в ваших строках, попробовать это:

idx_first_empty_row = reading_book.index[reading_book.iloc[:, 0].isnull().values]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...