API · Pandas

Pandas DataFrame DataFrame.append() 函数

Pandas 中的 append 方法将两个不同 DataFrame 的行合并,并返回新的 DataFrame。

本页内容

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_1 和 df_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 版本中被取消的警告保持沉默。