Функция Pandas Merge, дающая только заголовки столбцов - Обновление - PullRequest
0 голосов
/ 28 октября 2018

Чего я хочу достичь.

У меня есть два фрейма данных.DF1 и DF2.Оба читаются из разных файлов Excel.DF1 имеет 9 столбцов и 3000 строк, из которых одно из имен столбцов - «Группа кодов».DF2 имеет 2 столбца и 20 строк, из которых одним из названий столбцов также является «Группа кодов».В этом же кадре данных другой столбец «Метод управления кодом» содержит описание группы кодов.Например,H001 перерабатывается на вторичной переработке, H002 - на свалке.

Что происходит

Когда я использую команду data = pd.merge (DF1, DF2, on = 'Code Group') Я получаю только 10 имен столбцов, но нетряды внизу.

Что я ожидаю

Я бы хотел, чтобы DF1 и DF2 были объединены, и везде, где номер группы кодов совпадает с методом управления кодами, вставляется для объяснения.

Дополнительная информация

               Following are datatype for DF1
               Entity                       object
               Address                      object
               State                        object
               Site                         object
               Disposal Facility            object
               Pounds                      float64
               Waste Description            object
               Shipment Date        datetime64[ns]
               Code Group                   object

               FollOwing are datatype for DF2
               Code Management Method    object
               Code Group                object

То, что я пытался

Я пытался следовать советам из аналогичного поста на SO, что типы данных с обеих сторон должны быть одинаковыми, и Code Group здесь оба являются объектами, поэтому не знаю, что этовопрос.Я также попробовал функцию Concat.

Код

   import pandas as pd
   from pandas import ExcelWriter
   from pandas import ExcelFile
   CH =  "C:\Python\Waste\Shipment.xls"
   Code = "C:\Python\Waste\Code.xlsx"
   Data = pd.read_excel(Code)
   data1 = pd.read_excel(CH)
   data1.rename(columns={'generator_name':'Entity','generator_address':'Address', 'Site_City':'Site','final_disposal_facility_name':'Disposal Facility', 'wst_dscrpn':'Waste Description', 'drum_wgt':'Pounds', 'wst_dscrpn' : 'Waste Description', 'genrtr_sgntr_dt':'Shipment Date','generator_state': 'State','expected_disposal_management_methodcode':'Code Group'}, 
        inplace=True)
   data2 = data1[['Entity','Address','State','Site','Disposal Facility','Pounds','Waste Description','Shipment Date','Code Group']]
   data2
   merged = data2.merge(Data, on='Code Group')

Получение предупреждения

C: \ Anaconda \ lib \ site-packages \ pandas \ core \ generic.py: 5890: SettingWithCopyWarning: значениепытается установить копию фрагмента из DataFrame

См. предостережения в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self._update_inplace (new_data)

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

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

data2 ['Code'] = data2 ['Code']. Str.strip ()

0 голосов
/ 28 октября 2018
import pandas as pd

df1 = pd.DataFrame({'Region': [1,2,3],
                    'zipcode':[12345,23456,34567]})
df2 = pd.DataFrame({'ZipCodeLowerBound': [10000,20000,30000],
                    'ZipCodeUpperBound': [19999,29999,39999],
                    'Region': [1,2,3]})

df1.merge(df2, on='Region')

это то, как приведен пример, и результат для этого:

   Region   zipcode
0   1       12345
1   2       23456
2   3       34567

   Region   ZipCodeLowerBound   ZipCodeUpperBound
0   1            10000               19999
1   2            20000               29999
2   3            30000               39999

и эта вещь приведет к

    Region  zipcode ZipCodeLowerBound   ZipCodeUpperBound
0      1      12345       10000             19999
1      2      23456       20000             29999
2      3      34567       30000             39999

Я надеюсь, что это то, что вы хотите сделать

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