Заменить строки в одном фрейме данных строками из другого фрейма данных через цикл - PullRequest
1 голос
/ 11 июля 2020

Я пытаюсь заменить строки в фрейме данных строками из другого фрейма данных. У меня есть файл Excel со всем существующим кодом продукта в столбце 0 под названием «MASTER.xlsx», а остальные столбцы пусты. У меня есть еще один файл Excel под названием «COUT PROJET - HOTEL DE VILLE.xlsx», содержащий некоторые коды продуктов в столбце 0, а остальные столбцы заполнены значениями.

В конечном итоге я хочу перебрать как Файлы "MASTER.xlsx" и "COUT PROJET - HOTEL DE VILLE.xlsx". Когда код продукта находится в обоих файлах, я хочу заменить эту соответствующую строку в «MASTER.xlsx» заполненной строкой из «COUT PROJET - HOTEL DE VILLE.xlsx». Если код продукта не находится в COUT PROJET - HOTEL DE VILLE.xlsx, я хочу, чтобы эта строка в MASTER.xlsx оставалась неизменной (пустой).

import numpy as np
import pandas as pd
import time
import glob

df_master = pd.read_excel('MASTER.XLSX')

df = pd.read_excel('COÛT PROJET - HÔTEL DE VILLE.xlsx')

for index, column in df.iterrows(): 
        for index, row in df_master.iterrows():
            if row['DATE :'] == column['DATE :']:
                df_master.update(df)
            else:
                continue
                
        
df_master.to_excel('UPDATED COÛT PROJET - HÔTEL DE VILLE.xlsx')

Текущий код, кажется, частично работают, однако я думаю, потому что фреймы данных не имеют одинакового размера. Я добавил изображения того, как выглядят файлы Excel. Прошу прощения за отсутствие знаний, я новичок, пытаюсь помочь семейному бизнесу. Спасибо за помощь!

введите описание изображения здесь

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Обычно вы хотите избежать использования грубых циклов при использовании pandas. Они намного медленнее и неэффективны. Лучше всего использовать функцию apply в pandas, документация здесь . Вот несколько примеров использования apply: пример 1 , пример 2 , пример 3 .

0 голосов
/ 11 июля 2020

Вы можете делать большинство вещей в pandas без циклов.

Попробуйте что-то вроде этого:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0'],
                     'B': ['B0'],
                     'C': ['C0'],
                     'D': ['D0']})

df2 = pd.DataFrame({'A': ['A0','','','',''],
                    'B': ['B1','B2', 'B3', 'B4', 'B5'],
                    'C': ['C0','','','',''],
                    'D': ['D1','D2', 'D3', 'D4', 'D5']})

pd.concat([df1, df2], axis=0, sort=False).T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...