Pandas DataFrame append()函数
Pandas DataFrame append()函数用于合并另一个DataFrame对象中的行。
此函数返回一个新的DataFrame对象,并且不会更改源对象。
如果列不匹配,则将新列添加到结果DataFrame中。
1. Pandas DataFrame append()参数
append()函数的语法为:
append(other, ignore_index=False, verify_integrity=False, sort=None)
其他:DataFrame,Series或者类似Dict的对象,其行将添加到调用方DataFrame中。
ignore_index:如果为True,则将忽略源DataFrame对象中的索引。
verify_integrity:如果为True,则在创建具有重复项的索引时引发
ValueError
。sort:如果源DataFrame列未对齐,则对列进行排序。
不建议使用此功能。
因此,我们必须通过sort = True
来排序和静音警告消息。
如果传递了" sort = False",则不会对列进行排序,并且会忽略警告。
让我们看一下DataFrame append()函数的一些示例。
2.追加两个数据框
import pandas as pd df1 = pd.DataFrame({'Name': ['hyman', 'Lisa'], 'ID': [1, 2]}) df2 = pd.DataFrame({'Name': ['David'], 'ID': [3]}) print(df1) print(df2) df3 = df1.append(df2) print('\nResult DataFrame:\n', df3)
输出:
Name ID 0 hyman 1 1 Lisa 2 Name ID 0 David 3 Result DataFrame: Name ID 0 hyman 1 1 Lisa 2 0 David 3
3.附加和忽略DataFrame索引
如果查看前面的示例,则输出包含重复的索引。
我们可以传递ignore_index = True
来忽略源索引并将新索引分配给输出DataFrame。
df3 = df1.append(df2, ignore_index=True) print(df3)
输出:
Name ID 0 hyman 1 1 Lisa 2 2 David 3
4.为重复索引引发ValueError
如果两个DataFrame对象中有重复的索引,我们可以传递verify_integrity = True
来引发ValueError。
import pandas as pd df1 = pd.DataFrame({'Name': ['hyman', 'Lisa'], 'ID': [1, 2]}) df2 = pd.DataFrame({'Name': ['David'], 'ID': [3]}) df3 = df1.append(df2, verify_integrity=True)
输出:
ValueError: Indexes have overlapping values: Int64Index([0], dtype='int64')
让我们看另一个没有重复索引的示例。
import pandas as pd df1 = pd.DataFrame({'Name': ['hyman', 'Lisa'], 'ID': [1, 2]}, index=[100, 200]) df2 = pd.DataFrame({'Name': ['David'], 'ID': [3]}, index=[300]) df3 = df1.append(df2, verify_integrity=True) print(df3)
输出:
Name ID 100 hyman 1 200 Lisa 2 300 David 3
5.追加带有非匹配列的DataFrame对象
import pandas as pd df1 = pd.DataFrame({'Name': ['hyman', 'Lisa'], 'ID': [1, 2]}) df2 = pd.DataFrame({'Name': ['hyman', 'David'], 'ID': [1, 3], 'Role': ['CEO', 'Author']}) df3 = df1.append(df2, sort=False) print(df3)
输出:
Name ID Role 0 hyman 1 NaN 1 Lisa 2 NaN 0 hyman 1 CEO 1 David 3 Author
我们显式传递了sort = False来避免对列进行排序并忽略FutureWarning。
如果您不传递此参数,则输出将包含以下警告消息。
FutureWarning: Sorting because the non-concatenation axis is not aligned. A future version of pandas will change to not sort by default. To accept the future behavior, pass 'sort=False'. To retain the current behavior and silence the warning, pass 'sort=True'.
让我们看看当我们传递" sort = True"时会发生什么。
import pandas as pd df1 = pd.DataFrame({'Name': ['hyman', 'Lisa'], 'ID': [1, 2]}) df2 = pd.DataFrame({'Name': ['hyman', 'David'], 'ID': [1, 3], 'Role': ['CEO', 'Author']}) df3 = df1.append(df2, sort=True) print(df3)
输出:
ID Name Role 0 1 hyman NaN 1 2 Lisa NaN 0 1 hyman CEO 1 3 David Author
请注意,列在结果DataFrame对象中排序。
请注意,此功能已被弃用,将从将来的版本中删除。
让我们看另一个示例,在该示例中,我们具有不匹配的带有int值的列。
import pandas as pd df1 = pd.DataFrame({'ID': [1, 2]}) df2 = pd.DataFrame({'Name': ['hyman', 'Lisa']}) df3 = df1.append(df2, sort=False) print(df3)
输出:
ID Name 0 1.0 NaN 1 2.0 NaN 0 NaN hyman 1 NaN Lisa
请注意,ID值已更改为浮点数以允许使用NaN值。