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