Pandas DataFrame append()函数

时间:2020-02-23 14:42:06  来源:igfitidea点击:

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值。