وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

روش ادغام DataFrames در Pandas – merge()، join()، append()، concat() و update()

0 82
زمان لازم برای مطالعه: 11 دقیقه


معرفی

Pandas طیف وسیعی از روش ها و عملکردها را برای دستکاری داده ها از جمله ادغام DataFrames ارائه می دهد. ادغام DataFrames به شما این امکان را می دهد که هم بدون تغییر منبع داده اصلی یک DataFrame جدید ایجاد کنید و هم منبع داده اصلی را تغییر دهید.

اگر با SQL یا نوع مشابهی از داده های جدولی آشنا هستید، احتمالاً با این اصطلاح آشنا هستید join، که به معنای ترکیب DataFrame برای تشکیل یک DataFrame جدید است. اگر مبتدی هستید، درک کامل انواع پیوستن سخت است (درونی، بیرونی، چپ، راست). در این آموزش انواع اتصالات را با مثال هایی بررسی می کنیم.

تمرکز اصلی ما خواهد بود روی با استفاده از merge() و concat() کارکرد. با این حال، روش‌های ادغام دیگر را مورد بحث قرار می‌دهیم تا جایگزین‌های عملی تا حد امکان به شما ارائه دهیم.

برای این آموزش از نسخه پاندا استفاده می کنیم 1.1.4 و نسخه NumPy 1.19.4.

ادغام DataFrames با استفاده از ادغام()

بیایید با تنظیم DataFrames خود شروع کنیم، که برای بقیه آموزش استفاده خواهیم کرد.

df1 شامل لیست کاربران خیالی ما با نام، ایمیل و شناسه می شود.

import pandas as pd

df1 = pd.DataFrame({'user_id': ('id001', 'id002', 'id003', 'id004', 'id005', 'id006', 'id007'),
                    'first_name': ('Rivi', 'Wynnie', 'Kristos', 'Madalyn', 'Tobe', 'Regan', 'Kristin'),
                    'last_name': ('Valti', 'McMurty', 'Ivanets', 'Max', 'Riddich', 'Huyghe', 'Illis'),
                    'email': ('(email protected)', '(email protected)', '(email protected)',
                              '(email protected)', '(email protected)', '(email protected)', '(email protected)')
                    })

هنگام طراحی پایگاه داده، حفظ تنظیمات پروفایل (مانند رنگ پس‌زمینه، پیوند تصویر آواتار، اندازه قلم و غیره) در جدولی جداگانه از داده‌های کاربر (ایمیل، تاریخ اضافه‌شده و غیره) عمل خوبی در نظر گرفته می‌شود. سپس این جداول می توانند یک رابطه یک به یک داشته باشند.

برای شبیه سازی این سناریو با ایجاد همین کار را انجام خواهیم داد df2 با URL های تصویر و شناسه های کاربری:


df2 = pd.DataFrame({'user_id': ('id001', 'id002', 'id003', 'id004', 'id005'),
                    'image_url': ('http://example.com/img/id001.png', 'http://example.com/img/id002.jpg',
                                  'http://example.com/img/id003.bmp', 'http://example.com/img/id004.jpg',
                                  'http://example.com/img/id005.png')
                    })

در اینجا روش شکل گیری DataFrame ما آمده است:

# df1
  user_id first_name last_name                  email
0   id001       Rivi     Valti    (email protected)
1   id002     Wynnie   McMurty  (email protected)
2   id003    Kristos   Ivanets  (email protected)
3   id004    Madalyn       Max      (email protected)
4   id005       Tobe   Riddich  (email protected)
5   id006      Regan    Huyghe    (email protected)
6   id007    Kristin     Illis    (email protected)

#df2
  user_id                         image_url
0   id001  http://example.com/img/id001.png
1   id002  http://example.com/img/id002.jpg
2   id003  http://example.com/img/id003.bmp
3   id004  http://example.com/img/id004.jpg
4   id005  http://example.com/img/id005.png

بیایید این DataFrames را با هم ترکیب کنیم merge() تابع. ابتدا به تمام گزینه هایی که این تابع می تواند در یک نگاه بپذیرد نگاهی بیندازید:

pd.merge(left, right, how='inner', روی=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)

اکثر این گزینه ها دارای یک مقدار پیش فرض هستند به جز مقدار ترک کرد و درست. این دو پارامتر نام DataFrames هستند که ادغام خواهیم کرد. خود تابع یک DataFrame جدید برمی گرداند که ما در آن ذخیره می کنیم df3_merged متغیر.

کد زیر را در پوسته پایتون خود وارد کنید:

df3_merged = pd.merge(df1, df2)

از آنجایی که هر دو DataFrame ما دارای ستون هستند user_id با همین نام، merge() تابع به طور خودکار به دو جدول مطابقت می پیوندد روی آن کلید اگر دو ستون با نام های مختلف داشتیم، می توانستیم استفاده کنیم left_on='left_column_name' و right_on='right_column_name' برای تعیین کلیدها روی هر دو DataFrame به صراحت.

اجازه دهید print را df3_merged متغیر برای دیدن محتویات آن:

  user_id first_name last_name                  email                         image_url
0   id001       Rivi     Valti    (email protected)  http://example.com/img/id001.png
1   id002     Wynnie   McMurty  (email protected)  http://example.com/img/id002.jpg
2   id003    Kristos   Ivanets  (email protected)  http://example.com/img/id003.bmp
3   id004    Madalyn       Max      (email protected)  http://example.com/img/id004.jpg
4   id005       Tobe   Riddich  (email protected)  http://example.com/img/id005.png

متوجه خواهید شد که df3_merged دارای تنها 5 ردیف در حالی که اصلی است df1 7. چرا اینطور است؟

هنگامی که مقدار پیش فرض از how پارامتر تنظیم شده است inner، یک DataFrame جدید از تقاطع از دیتا فریم های چپ و راست. بنابراین، اگر الف user_id در یکی از جداول وجود ندارد، در DataFrame ادغام شده نخواهد بود.

حتی اگر جای ردیف‌های چپ و راست عوض شود، این موضوع صادق می‌ماند:

df3_merged = pd.merge(df2, df1)

نتایج همچنان:

  user_id                         image_url first_name last_name                  email
0   id001  http://example.com/img/id001.png       Rivi     Valti    (email protected)
1   id002  http://example.com/img/id002.jpg     Wynnie   McMurty  (email protected)
2   id003  http://example.com/img/id003.bmp    Kristos   Ivanets  (email protected)
3   id004  http://example.com/img/id004.jpg    Madalyn       Max      (email protected)
4   id005  http://example.com/img/id005.png       Tobe   Riddich  (email protected)

کاربران با شناسه 'id006' و 'id007' بخشی از DataFrame های ادغام شده نیستند زیرا آنها را قطع نمی کنند روی هر دو جدول

با این حال، مواقعی وجود دارد که می‌خواهیم از یکی از DataFrameها به عنوان DataFrame اصلی استفاده کنیم و تمام ردیف‌های آن را حتی اگر همه آنها با یکدیگر تلاقی نداشته باشند، قرار دهیم. این است که می گویند، به همه کاربران ما، در حالی که image_url اختیاری است.

چگونه؟ با استفاده از merge()، می توانیم عبور کنیم 'left' استدلال به how پارامتر:

df_left_merge = pd.merge(df1, df2, how='left')

print(df_left_merge)

با یک چپ پیوستن، ما تمام عناصر DataFrame سمت چپ را گنجانده ایم (df1) و هر عنصر از DataFrame سمت راست (df2). با اجرای کد بالا این را نشان می دهد:

  user_id first_name last_name                  email                         image_url
0   id001       Rivi     Valti    (email protected)  http://example.com/img/id001.png
1   id002     Wynnie   McMurty  (email protected)  http://example.com/img/id002.jpg
2   id003    Kristos   Ivanets  (email protected)  http://example.com/img/id003.bmp
3   id004    Madalyn       Max      (email protected)  http://example.com/img/id004.jpg
4   id005       Tobe   Riddich  (email protected)  http://example.com/img/id005.png
5   id006      Regan    Huyghe    (email protected)                               NaN
6   id007    Kristin     Illis    (email protected)                               NaN

سلول هایی که هیچ مقدار تطبیقی ​​با DataFrame سمت چپ ندارند با آنها پر می شوند NaN.

چرا یک پیوستن درست را امتحان نمی کنیم؟ DataFrame ادغام شده زیر را ایجاد کنید:

df_right_merge = pd.merge(df1, df2, how='right')

print(df_right_merge)

همانطور که ممکن است انتظار داشته باشید، حق عضویت هر مقدار از DataFrame سمت چپ که با DataFrame سمت راست مطابقت دارد را برمی گرداند:

  user_id first_name last_name                  email                         image_url
0   id001       Rivi     Valti    (email protected)  http://example.com/img/id001.png
1   id002     Wynnie   McMurty  (email protected)  http://example.com/img/id002.jpg
2   id003    Kristos   Ivanets  (email protected)  http://example.com/img/id003.bmp
3   id004    Madalyn       Max      (email protected)  http://example.com/img/id004.jpg
4   id005       Tobe   Riddich  (email protected)  http://example.com/img/id005.png

مانند هر ردیف در df2 دارای ارزش در df1، این right join مشابه است inner در این مورد بپیوندید

بیایید نگاهی به outer می پیوندد. برای بهتر نشان دادن روش کار آنها، اجازه دهید swap قرار دادن DataFrames ما و ایجاد 2 متغیر جدید برای هر دو اتصال چپ و خارجی:

df_left = pd.merge(df2, df1, how='left', indicator=True)
df_outer = pd.merge(df2, df1, how='outer', indicator=True)

print(df_left)
print(df_outer)

به خاطر داشته باشید که DataFrame سمت چپ ما است df2 و DataFrame مناسب است df1. استفاده کردن how='outer' تطبیق DataFrames را ادغام می کند روی کلید اما همچنین شامل مقادیری است که گم شده یا مطابقت ندارند.

ما همچنین اضافه کردیم indicator پرچم گذاری کنید و روی آن تنظیم کنید True به طوری که پانداها یک ستون اضافی اضافه می کنند _merge تا انتهای DataFrame ما. این ستون به ما می گوید که آیا یک ردیف در سمت چپ، راست یا هر دو DataFrame پیدا شده است.

این df_left متغیر به شکل زیر است:

  user_id                         image_url first_name last_name                  email _merge
0   id001  http://example.com/img/id001.png       Rivi     Valti    (email protected)   both
1   id002  http://example.com/img/id002.jpg     Wynnie   McMurty  (email protected)   both
2   id003  http://example.com/img/id003.bmp    Kristos   Ivanets  (email protected)   both
3   id004  http://example.com/img/id004.jpg    Madalyn       Max      (email protected)   both
4   id005  http://example.com/img/id005.png       Tobe   Riddich  (email protected)   both

با این حال، df_outer این داده ها را دارد:

  user_id                         image_url first_name last_name                  email      _merge
0   id001  http://example.com/img/id001.png       Rivi     Valti    (email protected)        both
1   id002  http://example.com/img/id002.jpg     Wynnie   McMurty  (email protected)        both
2   id003  http://example.com/img/id003.bmp    Kristos   Ivanets  (email protected)        both
3   id004  http://example.com/img/id004.jpg    Madalyn       Max      (email protected)        both
4   id005  http://example.com/img/id005.png       Tobe   Riddich  (email protected)        both
5   id006                               NaN      Regan    Huyghe    (email protected)  right_only
6   id007                               NaN    Kristin     Illis    (email protected)  right_only

توجه کنید که در df_outer DataFrame id006 و id007 فقط در DataFrame سمت راست وجود دارد (در این مورد چنین است df1). اگر بخواهیم اتصالات چپ و بیرونی را بدون تعویض مکان مقایسه کنیم، برای هر دوی آنها نتایج یکسانی خواهیم داشت.

ادغام DataFrames با استفاده از پیوستن()

بر خلاف merge() که روشی از نمونه پانداها است، join() روشی از خود DataFrame است. این بدان معنی است که می توانیم از آن مانند یک روش استاتیک استفاده کنیم روی DataFrame: DataFrame.join(other, روی=None, how='left', lsuffix='', rsuffix='', sort=False).

DataFrame که ما به آن می گوییم join() از دیتا فریم سمت چپ ما خواهد بود. DataFrame در other آرگومان DataFrame مناسب ما خواهد بود.

این روی پارامتر می تواند یک یا چند (('key1', 'key2' ...)) آرگومان هایی برای تعریف کلید تطبیق، while how پارامتر یکی از آرگومان های دسته (چپ، راست، بیرونی، داخلی) را می گیرد و تنظیم می شود left به صورت پیش فرض.

بیایید برای پیوستن تلاش کنیم df2 به df1:

df_join = df1.join(df2, rsuffix='_right')

print(df_join)

مانند merge() تابع، join() تابع به طور خودکار سعی می کند کلیدها (ستون ها) را با همان نام مطابقت دهد. در مورد ما، آن است user_id کلید

کد بالا این را چاپ می کند:

  user_id first_name last_name                  email user_id_right                         image_url
0   id001       Rivi     Valti    (email protected)         id001  http://example.com/img/id001.png
1   id002     Wynnie   McMurty  (email protected)         id002  http://example.com/img/id002.jpg
2   id003    Kristos   Ivanets  (email protected)         id003  http://example.com/img/id003.bmp
3   id004    Madalyn       Max      (email protected)         id004  http://example.com/img/id004.jpg
4   id005       Tobe   Riddich  (email protected)         id005  http://example.com/img/id005.png
5   id006      Regan    Huyghe    (email protected)           NaN                               NaN
6   id007    Kristin     Illis    (email protected)           NaN                               NaN

احتمالا متوجه یک “ستون تکراری” به نام شده اید user_id_right. اگر نمی خواهید آن ستون نمایش داده شود، می توانید آن را تنظیم کنید user_id ستون ها به عنوان شاخص روی هر دو ستون تا بدون پسوند به هم بپیوندد:

df_join_no_duplicates = df1.set_index('user_id').join(df2.set_index('user_id'))

print(df_join_no_duplicates)

با این کار از شر آن خلاص می شویم user_id ستون و در عوض آن را به عنوان ستون شاخص قرار دهید. این یک DataFrame تمیزتر را در اختیار ما قرار می دهد:

        first_name last_name                  email                         image_url
user_id                                                                              
id001         Rivi     Valti    (email protected)  http://example.com/img/id001.png
id002       Wynnie   McMurty  (email protected)  http://example.com/img/id002.jpg
id003      Kristos   Ivanets  (email protected)  http://example.com/img/id003.bmp
id004      Madalyn       Max      (email protected)  http://example.com/img/id004.jpg
id005         Tobe   Riddich  (email protected)  http://example.com/img/id005.png
id006        Regan    Huyghe    (email protected)                               NaN
id007      Kristin     Illis    (email protected)                               NaN

ادغام DataFrames با استفاده از ضمیمه ()

همانطور که اسناد رسمی پانداها اشاره می کند، از آن زمان concat() و append() روش‌ها کپی‌های جدیدی از DataFrames را برمی‌گردانند، استفاده بیش از حد از این روش‌ها می‌تواند بر عملکرد برنامه شما تأثیر بگذارد.

وقتی می‌خواهید دو DataFrame را فقط در محور ردیف ادغام کنید، Append بسیار مفید است. این بدان معناست که به جای تطبیق داده ها روی ستون های آنها، ما یک DataFrame جدید می خواهیم که شامل تمام ردیف های 2 DataFrame باشد.

بیایید ضمیمه کنیم df2 به df1 و print نتایج:

df_append = df1.append(df2, ignore_index=True)

print(df_append)

استفاده کردن append() با DataFrames مطابقت نخواهد داشت روی هر کلید فقط DataFrame دیگر را به اولی اضافه می کند و یک کپی از آن را برمی گرداند. اگر شکل‌های DataFrames مطابقت نداشته باشند، پانداها سلول‌های بی‌همتا را با NaN جایگزین می‌کنند.

خروجی برای الحاق دو DataFrame به شکل زیر است:

   user_id first_name last_name                  email                         image_url
0    id001       Rivi     Valti    (email protected)                               NaN
1    id002     Wynnie   McMurty  (email protected)                               NaN
2    id003    Kristos   Ivanets  (email protected)                               NaN
3    id004    Madalyn       Max      (email protected)                               NaN
4    id005       Tobe   Riddich  (email protected)                               NaN
5    id006      Regan    Huyghe    (email protected)                               NaN
6    id007    Kristin     Illis    (email protected)                               NaN
7    id001        NaN       NaN                    NaN  http://example.com/img/id001.png
8    id002        NaN       NaN                    NaN  http://example.com/img/id002.jpg
9    id003        NaN       NaN                    NaN  http://example.com/img/id003.bmp
10   id004        NaN       NaN                    NaN  http://example.com/img/id004.jpg
11   id005        NaN       NaN                    NaN  http://example.com/img/id005.png

اکثر کاربران انتخاب می کنند concat() بالای append() از آنجایی که گزینه تطبیق کلید و محور را نیز فراهم می کند.

ادغام DataFrames با استفاده از concat()

الحاق در مقایسه با آن کمی انعطاف پذیرتر است merge() و join() زیرا به ما این امکان را می دهد که DataFrames را به صورت عمودی (در ردیف) یا افقی (ستون) ترکیب کنیم.

مبادله این است که هر داده ای که مطابقت نداشته باشد از بین می رود. در اینجا تابع کامل با پارامترها است:

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None,
              levels=None, names=None, verify_integrity=False, sort=False, copy=True)

در اینجا متداول ترین پارامترهای مورد استفاده برای concat() تابع:

  • objs لیستی از اشیاء DataFrame ((df1, df2, …)) است که باید به هم متصل شوند
  • axis جهت الحاق را مشخص می کند، 0 برای ردیف عاقلانه و 1 برای ستون عاقلانه
  • join می تواند باشد inner (تقاطع) یا outer (اتحاد. اتصال)
  • ignore_index به طور پیش فرض روی False که به مقادیر شاخص اجازه می دهد همانطور که در DataFrames اصلی بودند باقی بمانند، می تواند باعث تکرار مقادیر شاخص شود. اگر تنظیم شود True، مقادیر اصلی را نادیده می گیرد و مقادیر شاخص را مجدداً به ترتیب متوالی اختصاص می دهد
  • keys به ما اجازه می دهد تا یک شاخص سلسله مراتبی بسازیم. آن را به عنوان سطح دیگری از شاخص اضافه شده در نظر بگیرید روی سمت چپ بیرونی DataFrame که به ما کمک می کند تا زمانی که مقادیر منحصر به فرد نیستند، شاخص ها را تشخیص دهیم

بیایید یک DataFrame جدید با انواع ستون های مشابه ایجاد کنیم df2، اما این یکی شامل image_url برای id006 و id007:

df2_addition = pd.DataFrame({'user_id': ('id006', 'id007'),
                             'image_url': ('http://example.com/img/id006.png',
                                           'http://example.com/img/id007.jpg')
                             })

به منظور پیوستن df2 و df2_addition از نظر ردیف، می‌توانیم آنها را در فهرستی به‌عنوان علامت ارسال کنیم objs پارامتر و DataFrame حاصل را به یک متغیر جدید اختصاص دهید:

df_row_concat = pd.concat((df2, df2_addition))

print(df_row_concat)

ما با موفقیت مقادیر از دست رفته را پر کردیم:

  user_id                         image_url
0   id001  http://example.com/img/id001.png
1   id002  http://example.com/img/id002.jpg
2   id003  http://example.com/img/id003.bmp
3   id004  http://example.com/img/id004.jpg
4   id005  http://example.com/img/id005.png
0   id006  http://example.com/img/id006.png
1   id007  http://example.com/img/id007.jpg

با این حال، نگاهی به شاخص ها در ستون سمت چپ بیندازید. شاخص ها 0 و 1 در حال تکرار هستند. برای بدست آوردن مقادیر شاخص کاملاً جدید و منحصر به فرد، عبور می کنیم True به ignore_index پارامتر:

df_row_concat = pd.concat((df2, df2_addition), ignore_index=True)

حالا ما df_row_concat دارای مقادیر شاخص منحصر به فرد:

  user_id                         image_url
0   id001  http://example.com/img/id001.png
1   id002  http://example.com/img/id002.jpg
2   id003  http://example.com/img/id003.bmp
3   id004  http://example.com/img/id004.jpg
4   id005  http://example.com/img/id005.png
5   id006  http://example.com/img/id006.png
6   id007  http://example.com/img/id007.jpg

همانطور که قبلا ذکر کردیم، الحاق می تواند هم به صورت افقی و هم به صورت عمودی کار کند. برای اتصال دو DataFrame به یکدیگر از نظر ستونی، باید آن را تغییر دهیم axis مقدار از پیش فرض 0 به 1:

df_column_concat = pd.concat((df1, df_row_concat), axis=1)

print(df_column_concat)

متوجه خواهید شد که مانند ادغام، مطابقت با دو جدول کار نمی کند روی یک کلید:

  user_id first_name last_name                  email user_id                         image_url
0   id001       Rivi     Valti    (email protected)   id001  http://example.com/img/id001.png
1   id002     Wynnie   McMurty  (email protected)   id002  http://example.com/img/id002.jpg
2   id003    Kristos   Ivanets  (email protected)   id003  http://example.com/img/id003.bmp
3   id004    Madalyn       Max      (email protected)   id004  http://example.com/img/id004.jpg
4   id005       Tobe   Riddich  (email protected)   id005  http://example.com/img/id005.png
5   id006      Regan    Huyghe    (email protected)   id006  http://example.com/img/id006.png
6   id007    Kristin     Illis    (email protected)   id007  http://example.com/img/id007.jpg

اگر DataFrame سمت راست ما حتی الف نداشت user_id ستون، این الحاق همچنان همان نتیجه را نشان می دهد. این concat() تابع چسب ها دو DataFrame با هم، با در نظر گرفتن مقادیر شاخص های DataFrames و شکل جدول

مانند تطبیق کلید را انجام نمی دهد merge() یا join(). با تغییر دادن ترکیبات مختلف الحاق را امتحان کنید join پارامتر برای دیدن تفاوت ها!

ادغام DataFrames با استفاده از combination_first() و به روز رسانی()

در برخی موارد، ممکن است بخواهید داده های از دست رفته در DataFrame خود را با ادغام آن با DataFrame دیگری پر کنید. با انجام این کار، تمام مقادیر گم نشده را در اولین DataFrame نگه می دارید و در عین حال همه را جایگزین می کنید. NaN مقادیر با مقادیر غیر مفقود موجود از DataFrame دوم (در صورت وجود).

برای این مثال، ما import NumPy برای استفاده NaN ارزش های. اگر پانداها را با pip، NumPy باید قبلاً نصب شده باشد.

کد زیر را در پوسته یا فایل اسکریپت پایتون تایپ کنید:

import numpy as np

df_first = pd.DataFrame({'COL 1': ('X', 'X', np.nan),
                         'COL 2': ('X', np.nan, 'X'),
                         'COL 3': (np.nan, 'X', 'X')},
                        index=range(0, 3))

df_second = pd.DataFrame({'COL 1': (np.nan, 'O', 'O'),
                          'COL 2': ('O', 'O', 'O')},
                         index=range(0, 3))

print(df_first)
print(df_second)

این df_first DataFrame دارای 3 ستون و 1 مقدار گم شده در هر یک از آنها است:

  COL 1 COL 2 COL 3
0     X     X   NaN
1     X   NaN     X
2   NaN     X     X

در حالی که df_second فقط 2 ستون و یک مقدار از دست رفته در ستون اول دارد:

  COL 1 COL 2
0   NaN     O
1     O     O
2     O     O

ما میتوانیم استفاده کنیم df_second به پچ مقادیر از دست رفته در df_first با تمام مقادیر مربوطه:

df_tictactoe = df_first.combine_first(df_second)

print(df_tictactoe)

همانطور که قبلا ذکر شد، با استفاده از combine_first() روش فقط جایگزین خواهد شد NaN مقادیر را به ترتیب فهرست بندی می کند، و تمام مقادیر غیر از دست رفته را در اولین DataFrame به همان صورت باقی می گذارد:

  COL 1 COL 2 COL 3
0     X     X   NaN
1     X     O     X
2     O     X     X

از طرف دیگر، اگر بخواهیم مقادیر در را بازنویسی کنیم df_first با مقادیر مربوطه از df_second (صرف نظر از اینکه NaN باشند یا نباشند)، ما از آن استفاده می کنیم update() روش.

بیایید ابتدا یک DataFrame دیگر به کد خود اضافه کنیم:

df_third = pd.DataFrame({'COL 1': ('O'), 'COL 2': ('O'), 'COL 3': ('O')})

print(df_third)

شکل (1، 3) است – 1 ردیف و سه ستون، به استثنای شاخص:

  COL 1 COL 2 COL 3
0     O     O     O

حالا بیایید به روز رسانی کنیم df_first با مقادیر از df_third:

df_first.update(df_third)

print(df_first)

به خاطر داشته باشید که بر خلاف combine_first()، update() DataFrame جدیدی را بر نمی گرداند. را اصلاح می کند df_first در محل، با تغییر مقادیر مربوطه:

  COL 1 COL 2 COL 3
0     O     O     O
1     X   NaN     X
2   NaN     X     X

این overwrite پارامتر از update() تابع تنظیم شده است True به صورت پیش فرض. به همین دلیل است که به جای تنها، همه مقادیر مربوطه را تغییر می دهد NaN ارزش های. ما می توانیم آن را تغییر دهیم False فقط برای تعویض NaN ارزش های:

df_tictactoe.update(df_first, overwrite=False)

print(df_tictactoe)

در اینجا آخرین وضعیت ما است df_tictactoe DataFrame:

  COL 1 COL 2 COL 3
0     X     X     O
1     X     O     X
2     O     X     X

ما نه تنها مقادیر را با موفقیت به روز کردیم، بلکه در بازی تیک تاک تو نیز برنده شدیم!

نتیجه

Pandas ابزارهای قدرتمندی برای ادغام DataFrames فراهم می کند. اما تصمیم گیری در مورد زمان استفاده از چه چیزی می تواند سخت باشد. در حالی که اکثر مواقع merge() عملکرد کافی است، برای برخی موارد ممکن است بخواهید از آن استفاده کنید concat() برای ادغام ردیفی یا استفاده از join() با پسوندها، یا خلاص شدن از شر مقادیر از دست رفته با combine_first() و update(). حتی می توانید ردیف هایی از داده ها را با آن اضافه کنید append().

از عملکردی استفاده کنید که بیشتر با آن راحت هستید و برای کار در دستتان بهترین است. چگونه این توابع به شما در دستکاری داده ها در پانداها کمک می کند؟

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-13 08:23:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید