Pandas DataFrame DataFrame.append() 函式

Suraj Joshi 2024年2月16日
  1. pandas.DataFrame.append() 方法的語法
  2. 示例程式碼:用 pandas.DataFrame.append() 新增兩個 DataFrame
  3. 示例程式碼: 用 pandas.DataFrame.append() 來追加 DataFrame 並忽略索引
  4. DataFrame.append() 方法中設定 verify_integrity=True
  5. 示例程式碼:新增不同列的 DataFrame
Pandas DataFrame DataFrame.append() 函式

pandas.DataFrame.append() 將一個 DataFrame 作為輸入,並將其行與呼叫該方法的 DataFrame 的行合併,最後返回一個新的 DataFrame。如果輸入 DataFrame 中的任何一列在呼叫者 DataFrame 中不存在,那麼這些列將被新增到 DataFrame 中,缺失的值將被設定為 NaN

pandas.DataFrame.append() 方法的語法

DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)

引數

other 輸入 DataFrame 或 Series,或 Python Dictionary-like,其行將被追加
ignore_index 布林型。如果是 True,則忽略原始 DataFrame 中的索引,預設值是 False,表示使用索引。預設值是 False,意味著使用索引
verify_integrity 布林型。如果是 True,在建立有重複的索引時引發 ValueError。預設值是 False
sort 布林型。如果列不對齊,它將對原始資料和其他 DataFrame 進行排序

示例程式碼:用 pandas.DataFrame.append() 新增兩個 DataFrame

import pandas as pd

names_1=['Hisila', 'Brian','Zeppy']
salary_1=[23,30,21]

names_2=['Ram','Shyam',"Hari"]
salary_2=[22,23,31]

df_1 = pd.DataFrame({'Name': names_1, 'Salary': salary_1})
df_2 = pd.DataFrame({'Name': names_2, 'Salary': salary_2})

merged_df = df_1.append(df_2)
print(merged_df)

輸出:

     Name  Salary
0  Hisila      23
1   Brian      30
2   Zeppy      21
    Name  Salary
0    Ram      22
1  Shyam      23
2   Hari      31
     Name  Salary
0  Hisila      23
1   Brian      30
2   Zeppy      21
0     Ram      22
1   Shyam      23
2    Hari      31

它在 df_1 的末尾新增 df_2,並返回 merged_df,合併兩個 DataFrames 的行。在這裡,merged_df 的索引與它們的父 DataFrames 相同。

示例程式碼: 用 pandas.DataFrame.append() 來追加 DataFrame 並忽略索引

import pandas as pd

names_1=['Hisila', 'Brian','Zeppy']
salary_1=[23,30,21]

names_2=['Ram','Shyam',"Hari"]
salary_2=[22,23,31]

df_1 = pd.DataFrame({'Name': names_1, 'Salary': salary_1})
df_2 = pd.DataFrame({'Name': names_2, 'Salary': salary_2})

merged_df = df_1.append(df_2,ignore_index=True)

print(df_1)
print(df_2)
print( merged_df)

輸出:

     Name  Salary
0  Hisila      23
1   Brian      30
2   Zeppy      21
    Name  Salary
0    Ram      22
1  Shyam      23
2   Hari      31
     Name  Salary
0  Hisila      23
1   Brian      30
2   Zeppy      21
3     Ram      22
4   Shyam      23
5    Hari      31

它將 df_2 追加到 df_1 的末尾,這裡 merged_df 通過使用 append() 方法中的 ignore_index=True 引數得到全新的索引。

DataFrame.append() 方法中設定 verify_integrity=True

如果我們在 append() 方法中設定 verify_integrity=True,我們會得到重複索引的 ValueError

import pandas as pd

names_1=['Hisila', 'Brian','Zeppy']
salary_1=[23,30,21]

names_2=['Ram','Shyam',"Hari"]
salary_2=[22,23,31]

df_1 = pd.DataFrame({'Name': names_1, 'Salary': salary_1})
df_2 = pd.DataFrame({'Name': names_2, 'Salary': salary_2})

merged_df = df_1.append(df_2,verify_integrity=True)

print(df_1)
print(df_2)
print( merged_df)

輸出:

ValueError: Indexes have overlapping values: Int64Index([0, 1, 2], dtype='int64')

由於 df_1df_2 中的元素預設有相同的索引,所以產生了 ValueError。為了防止這個錯誤,我們使用 verify_integrity 的預設值,即 verify_integrity=False

示例程式碼:新增不同列的 DataFrame

如果我們追加一個不同列的 DataFrame,這個列就會被新增到生成的 DataFrame 中,原 DataFrame 或其他 DataFrame 中不存在的列的相應單元格被設定為 NaN

import pandas as pd

names_1=['Hisila', 'Brian','Zeppy']
salary_1=[23,30,21]

names_2=['Ram','Shyam',"Hari"]
salary_2=[22,23,31]
Age=[30,31,33]

df_1 = pd.DataFrame({'Name': names_1, 'Salary': salary_1})
df_2 = pd.DataFrame({'Name': names_2, 'Salary': salary_2,"Age":Age})

merged_df = df_1.append(df_2, sort=False)

print(df_1)
print(df_2)
print( merged_df)

輸出:

     Name  Salary
0  Hisila      23
1   Brian      30
2   Zeppy      21
    Name  Salary  Age
0    Ram      22   30
1  Shyam      23   31
2   Hari      31   33
     Name  Salary   Age
0  Hisila      23   NaN
1   Brian      30   NaN
2   Zeppy      21   NaN
0     Ram      22  30.0
1   Shyam      23  31.0
2    Hari      31  33.0

這裡,df_1 的行得到 Age 列的 NaN 值,因為 Age 列只存在於 df_2 中。

我們還設定了 sort=False,以使排序在未來的 Pandas 版本中被取消的警告保持沉默。

作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相關文章 - Pandas DataFrame