#python #pandas #dataframe #nan
Вопрос:
У меня есть кадры данных, которые выглядят так,
df1 :
X1 X2 X3 X4
2021-02-23 15:44:20.100 NaN 0 1 Nan
2021-02-23 15:44:20.300 NaN 0 1 Nan
2021-02-23 15:44:20.500 NaN 0 1 Nan
2021-02-23 15:44:20.700 NaN 0 1 Nan
2021-02-23 15:44:20.900 NaN 0 1 Nan
2021-02-23 15:44:21.100 NaN 0 1 Nan
2021-02-23 15:44:21.300 NaN 0 1 Nan
2021-02-23 15:44:21.500 NaN 0 1 Nan
2021-02-23 15:44:21.700 NaN 0 1 Nan
2021-02-23 15:44:21.900 NaN 0 1 Nan
df2 :
X1 X2 X3 X4
2021-02-23 15:44:20.000 0 0 1 Nan
2021-02-23 15:44:20.200 3 0 1 Nan
2021-02-23 15:44:20.400 NaN 0 1 Nan
2021-02-23 15:44:20.600 NaN 0 1 Nan
2021-02-23 15:44:20.800 NaN 0 1 3
2021-02-23 15:44:21.000 NaN 0 1 Nan
2021-02-23 15:44:21.200 NaN 0 1 3
2021-02-23 15:44:21.400 NaN 0 1 Nan
2021-02-23 15:44:21.600 NaN 0 1 4
2021-02-23 15:44:21.800 NaN 0 1 Nan
2021-02-23 15:44:22.000 NaN 0 1 Nan
2021-02-23 15:44:22.200 NaN 0 1 Nan
2021-02-23 15:44:22.400 NaN 0 1 Nan
2021-02-23 15:44:22.600 NaN 0 1 Nan
Я хочу выполнить операцию слияния/объединения/объединения значений из столбцов левого фрейма данных (df1) в правый фрейм данных (df2). Это означало бы поиск временной шкалы по строкам в индексе времени и замену NAN, которые, возможно, уже существуют…
Интуиция: Что-то вроде merge_asof, но не создающего столбцы _x и _y, вместо этого заменяющего значения слева df справа.
Пожалуйста, обратите внимание:
- Столбцы в правом фрейме данных всегда точно равны столбцам в левом фрейме данных.
- В интуиции..
pandas.Dataframe.merge_asof()
присоединяется ли левое соединение, но у меня другой случай, это больше похоже на внешнее соединение.
Результирующий объединенный/объединенный фрейм данных:
X1 X2 X3 X4
2021-02-23 15:44:20.100 0 0 1 Nan
2021-02-23 15:44:20.300 3 0 1 Nan
2021-02-23 15:44:20.500 NaN 0 1 Nan
2021-02-23 15:44:20.700 NaN 0 1 Nan
2021-02-23 15:44:20.900 NaN 0 1 3
2021-02-23 15:44:21.100 NaN 0 1 Nan
2021-02-23 15:44:21.300 NaN 0 1 3
2021-02-23 15:44:21.500 NaN 0 1 Nan
2021-02-23 15:44:21.700 NaN 0 1 4
2021-02-23 15:44:21.900 NaN 0 1 Nan
2021-02-23 15:44:22.000 NaN 0 1 Nan
2021-02-23 15:44:22.200 NaN 0 1 Nan
2021-02-23 15:44:22.400 NaN 0 1 Nan
2021-02-23 15:44:22.600 NaN 0 1 Nan
Что я пробовал:
- Один из методов, который я пробовал,-это повторное сравнение df1 и df2 с частотой, установленной как «T», что в основном гарантирует, что у обоих фреймов данных будут одинаковые ключи, если таковые имеются. Тогда выполнение соединений было бы прямым.
- Проблема: При уменьшении df в панд по умолчанию отбрасываются строки NaN, и я не знаю способа, чтобы предотвратить это. Я не хочу удалять какие-либо данные … просто замените.
- merge_asof или традиционные слияния создают повторяющиеся столбцы с суффиксами, которые мне не нужны.
- присоединяйтесь и добавляйте просто добавляет строки из df2 в df1, что также не то, что я хочу.
То, что я предлагаю, может сработать:
- проверка второго кадра данных вручную для строки, синхронизирующей время, и повторение каждой строки. В моем случае это также невозможно, так как рассматриваемые фреймы данных очень велики.
df1.shape -> (12200317 rows x 41 columns)
df2.shape -> (10000023 rows x 41 columns)
У меня также есть несколько кадров данных, которые нужно просмотреть. (приблизительно 50)
Если есть какие-либо дубликаты этого вопроса .. Я не мог его найти.. Спасибо за любую помощь. 🙂
Комментарии:
1. Ни одна из меток метки времени индекса в df1 не соответствует df2. Можете ли вы привести более минималистичный, воспроизводимый пример с минимальным набором столбцов и минимальным набором строк и описать ввод и вывод, которые вы хотите.
2. «Ни одна из меток метки времени индекса в df1 не соответствует df2» Да, в этом и заключается суть вопроса. Это минимальный пример с определенным набором столбцов и строк, а также выводом. Тогда вопрос в том, как «воспроизвести» то, что есть в качестве вывода, программно с помощью панд. Я неправильно понял ваше замечание? Спасибо за ответ.
3. в минимальном примере не было бы фрейма данных с индексом длиной 14, и вам не нужны 4 столбца. Воспроизводимый пример будет содержать код, необходимый для построения ваших минимальных кадров данных. ваш результирующий фрейм данных, как указано, совпадает с df2, поэтому он не может быть вашим предполагаемым результатом. Извинись, если я полностью упущу суть, но если я это сделаю, я подозреваю, что и многие другие.
4. «в минимальном примере не было бы фрейма данных с индексом длиной 14, и вам не нужны 4 столбца».? Хорошо. «ваш результирующий кадр данных, как указано, совпадает с df2, так что это не может быть вашим предполагаемым результатом»- Нет, это не так. «Приношу извинения, если я полностью упускаю суть», Вы, ИМО