Как я могу создать динамические переменные c INT для ежедневных изменений размера данных - PullRequest
0 голосов
/ 19 апреля 2020

Каждый день я получаю много разных файлов от разных поставщиков, и размеры сильно различаются. Я ищу какой-нибудь динамический код c, который решит, что актуально для всех файлов. Я хотел бы подумать, как разбить этот файл на компоненты (например, df1, df2, df3), что облегчит анализ.

В основном первые 6 строк предназначены для общей информации о магазине (df1).

2-й компонент зарезервирован для конкретных c продаж товаров (начиная со строки 9, заканчивая РАЗЛИЧНОЙ строкой в ​​каждом файле), и я не уверен, как это зафиксировать. Я пробовал что-то вроде

numb = df.loc['Type of payment'].index[0] - 2

, но он вводит кортеж вместо расположения строки (int). Как я могу сохранить upperrange и lowerrange, чтобы быть динамическим c (int), чтобы каждый день он приносил правильные данные df2, которые я ищу?

Та же проблема существует в внизу в разделе «Тип оплаты» - вы заметите, что криптография включена на 1-й день, но не на 2-й. Мне нужно найти способ получить динамический диапазон c, чтобы удалить ошибочную информацию и сохранить целостность всего остального. Я думаю, что обнаружение lowerrange позволит мне выполнить захват с этой точки до конца листа, но я открыт для предложений.

df = pd.read_csv('GMSALES.csv', skipfooter=2)
upperrange = df.loc['Item Number']  #brings in tuple
lowerrange = df.loc['Type of payment'] #brings in tuple

df1 = df.iloc[:,7] #this works
df2 = df.iloc[:('upperrange':'lowerrange')] # this is what I would like to get to
df3 = df.iloc[:(lowerrange:)]               # this is what I would like to get to

GMSALES

1 Ответ

0 голосов
/ 19 апреля 2020

Ваша организационная проблема заключается в том, что ваши данные поступают в виде электронной таблицы, которая используется для физической организации, более чем функциональной организации. «Столбцы» - это просто типографские вкладки. Файл содержит несколько типов разнородных данных; Вы правы, желая реорганизовать это в отдельные фреймы данных.

Очень просто, вам нужно проанализировать файл, клиент за клиентом - либо до, либо после чтения его в ОЗУ.

Из вашей текущей организации, это включает в себя простое сканирование диапазона "df2" вашего гетерогенного фрейма данных. Я думаю, что самый простой способ - начать с 7-й строки и искать «Номер элемента» в столбце A; это ваш ряд имен столбцов. Затем сканируйте, пока в столбце A не найдете строку, в которой ничего нет; сделайте резервную копию одной строки, и это даст вам lowerrange.

Повторите с платежами: найдите следующую строку с «Типом платежа». Я предполагаю, что у вас есть какой-то способ отличить типы платежей от поддельных данных, например, список допустимых типов платежей (строк). Сканируйте из «Типа платежа», пока не найдете строку с чем-то отличным от допустимого типа платежа; предыдущий ряд - это lowerrange для df3.

Можете ли вы принять его там?

...