Срез массива numpy/pandas на основе значения None в одном из массивов/столбцов ⇐ Python
Срез массива numpy/pandas на основе значения None в одном из массивов/столбцов
У меня есть следующий код, в котором я пытаюсь разрезать/преобразовать массив данных в несколько кадров данных, а затем объединить эти кадры данных вместе
импортировать pandas как pd, numpy как np arr=[['id', 'aaa', 'bbb', Нет, 'ccc', Нет, Нет], ['период', 'д', 'д', Нет, 'д', Нет, Нет], ['дата', 'цена', 'цена', 'объем', 'цена', 'объем', 'mktcap'], ['03.01.2001', 103.1, 103.2, 10000, 103.4, 20000, 1000000], ['04.01.2001', 104.1, 104.2, 11000, 104.4, 30000, 1000000], ['05.01.2001', 105.1, 105.2, 12000, 105.4, 40000, 1000000], ] данные = np.array(arr) all_ts =[] для столбца в диапазоне (1,data.shape[1]): идентификатор = данные[0][столбец] за = данные[1][столбец] если идентификатор Нет: продолжать #из третьей строки возьмите столбец даты и текущий столбец и создайте фрейм данных ts_data = данные[2:,[0, столбец]] столбцы = ts_data[:1,][0] ts_data = pd.DataFrame(ts_data[1:], columns=cols) ts_data = ts_data[cols].dropna() ts_data['id'] = идентификатор ts_data['период'] = за all_ts.append(ts_data) df = pd.concat(all_ts) дф Приведенный выше код будет генерировать только кадры данных со столбцами со столбцами: id, period, date, цена, потому что, когда он встречает None, я продолжаю (так как пока не могу понять, как получить следующие столбцы «None»).
Я хотел бы получить в итоге 3 фрейма данных:
[*]Первый со столбцами: id, период, дата, цена [*]Второй со столбцами: id, период, дата, цена, объем [*]Третий со столбцами: id, период, дата, цена, объем, mktcap
Итак, по сути, из строки 3 я хочу взять первый столбец (столбец даты) плюс столбцы «поля» и создать фрейм данных - но проблема, с которой я борюсь, заключается в том, что несколько полей должны быть объединены, если последующие поля не имеют над ними значения None (т. е. в столбцах периода или идентификатора).
Изменить/обновить: мне удалось сделать это с помощью следующей настройки... но это не кажется питоническим/нумеричным. обратите внимание на добавление еще одной переменной с именем select_cols, которая продолжает добавляться при обнаружении None. Я думаю, что numpy должен предложить лучший способ сделать это... просто не уверен, что это может быть.
all_ts =[] select_cols = [0] для столбца в диапазоне (1,data.shape[1]): идентификатор = данные[0][столбец] за = данные[1][столбец] select_cols += [столбец] если идентификатор Нет: продолжать #из третьей строки возьмите столбец даты и текущий столбец и создайте фрейм данных ts_data = данные[2:, select_cols] столбцы = ts_data[:1,][0] ts_data = pd.DataFrame(ts_data[1:], columns=cols) ts_data = ts_data[cols].dropna() ts_data['id'] = идентификатор ts_data['период'] = за all_ts.append(ts_data) select_cols=[0] df = pd.concat(all_ts) дф
У меня есть следующий код, в котором я пытаюсь разрезать/преобразовать массив данных в несколько кадров данных, а затем объединить эти кадры данных вместе
импортировать pandas как pd, numpy как np arr=[['id', 'aaa', 'bbb', Нет, 'ccc', Нет, Нет], ['период', 'д', 'д', Нет, 'д', Нет, Нет], ['дата', 'цена', 'цена', 'объем', 'цена', 'объем', 'mktcap'], ['03.01.2001', 103.1, 103.2, 10000, 103.4, 20000, 1000000], ['04.01.2001', 104.1, 104.2, 11000, 104.4, 30000, 1000000], ['05.01.2001', 105.1, 105.2, 12000, 105.4, 40000, 1000000], ] данные = np.array(arr) all_ts =[] для столбца в диапазоне (1,data.shape[1]): идентификатор = данные[0][столбец] за = данные[1][столбец] если идентификатор Нет: продолжать #из третьей строки возьмите столбец даты и текущий столбец и создайте фрейм данных ts_data = данные[2:,[0, столбец]] столбцы = ts_data[:1,][0] ts_data = pd.DataFrame(ts_data[1:], columns=cols) ts_data = ts_data[cols].dropna() ts_data['id'] = идентификатор ts_data['период'] = за all_ts.append(ts_data) df = pd.concat(all_ts) дф Приведенный выше код будет генерировать только кадры данных со столбцами со столбцами: id, period, date, цена, потому что, когда он встречает None, я продолжаю (так как пока не могу понять, как получить следующие столбцы «None»).
Я хотел бы получить в итоге 3 фрейма данных:
[*]Первый со столбцами: id, период, дата, цена [*]Второй со столбцами: id, период, дата, цена, объем [*]Третий со столбцами: id, период, дата, цена, объем, mktcap
Итак, по сути, из строки 3 я хочу взять первый столбец (столбец даты) плюс столбцы «поля» и создать фрейм данных - но проблема, с которой я борюсь, заключается в том, что несколько полей должны быть объединены, если последующие поля не имеют над ними значения None (т. е. в столбцах периода или идентификатора).
Изменить/обновить: мне удалось сделать это с помощью следующей настройки... но это не кажется питоническим/нумеричным. обратите внимание на добавление еще одной переменной с именем select_cols, которая продолжает добавляться при обнаружении None. Я думаю, что numpy должен предложить лучший способ сделать это... просто не уверен, что это может быть.
all_ts =[] select_cols = [0] для столбца в диапазоне (1,data.shape[1]): идентификатор = данные[0][столбец] за = данные[1][столбец] select_cols += [столбец] если идентификатор Нет: продолжать #из третьей строки возьмите столбец даты и текущий столбец и создайте фрейм данных ts_data = данные[2:, select_cols] столбцы = ts_data[:1,][0] ts_data = pd.DataFrame(ts_data[1:], columns=cols) ts_data = ts_data[cols].dropna() ts_data['id'] = идентификатор ts_data['период'] = за all_ts.append(ts_data) select_cols=[0] df = pd.concat(all_ts) дф
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение