Панды, модифицирующие разделы, затем рекомбинируют - PullRequest
0 голосов
/ 10 июля 2019

Я занимался модификацией документа Excel с помощью Pandas. Мне нужно работать только с небольшими разделами за раз, и разбиение каждого на отдельный DataFrame, а затем повторное объединение в единое целое после изменения кажется лучшим решением. Это возможно? Я пробовал пару вариантов с помощью merge () и concat (), но они, похоже, не дают мне результатов, которые я ищу.

Как уже говорилось ранее, я пытался использовать функцию merge () для рекомбинации их вместе с таблицей большего размера. Я только что получил ошибку памяти, и когда я тестировал ее с меньшими кадрами данных, строки не поддерживались.

вот небольшой пример того, что я собираюсь сделать:

import pandas as pd

df1 = pd.DataFrame({'A':[1,2,3,5,6],'B':[3,10,11,13,324],'C':[64,'','' ,'','' ],'D':[32,45,67,80,100]})#example df
print(df1)
df2= df1[['B','C']]#section taken
df2.at[2,'B'] = 1#modify area
print(df2)
df1 = df1.merge(df2)#merge dataframes
print(df1)

вывод:


   A    B   C    D
0  1    3  64   32
1  2   10       45
2  3   11       67
3  5   13       80
4  6  324      100
     B   C
0    3  64
1   10    
2    1    
3   13    
4  324    
   A    B   C    D
0  1    3  64   32
1  2   10       45
2  5   13       80
3  6  324      100

что бы я хотел увидеть


   A    B   C    D
0  1    3  64   32
1  2   10       45
2  3   11       67
3  5   13       80
4  6  324      100
     B   C
0    3  64
1   10    
2    1    
3   13    
4  324    
   A    B   C    D
0  1    3  64   32
1  2   10       45
2  3    1       67
3  5   13       80
4  6  324      100

Как я уже говорил, в моем реальном коде я просто получаю ошибку памяти, если пытаюсь сделать это из-за размера фрейма данных

1 Ответ

0 голосов
/ 10 июля 2019

Здесь нет необходимости в слиянии, вы можете просто переназначить значения из df2 в df1:

...
df1.loc[df2.index, df2.columns] = df2 #recover changes into original dataframe
print(df1)

дает как ожидалось:

   A    B   C    D
0  1    3  64   32
1  2   10       45
2  3    1       67
3  5   13       80
4  6  324      100

df1.update(df2) дает тот же результат (спасибо Quang Hoang за точность)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...