Срез массива numpy/pandas на основе значения None в одном из массивов/столбцовPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Срез массива numpy/pandas на основе значения None в одном из массивов/столбцов

Сообщение Anonymous »


У меня есть следующий код, в котором я пытаюсь разрезать/преобразовать массив данных в несколько кадров данных, а затем объединить эти кадры данных вместе

импортировать 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) дф
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»