Pandas DataFrame DataFrame.append() 函数

Suraj Joshi 2023年1月30日 2020年5月23日
  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 版本中被取消的警告保持沉默。

Author: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

相关文章 - Pandas DataFrame