Python中的Pandas DataFrame append()方法

Pandas DataFrame append()方法用于将一个DataFrame的行追加到另一DataFrame的末尾。追加后,它返回一个新的DataFrame对象。 append()函数不会更改源或原始DataFrame。第一个DataFrame中不存在的列将添加到附加的DataFrame中,并且新单元格将填充NaN值。

DataFrame append()函数存在于Pandas library()中,Pandas library()是一个很棒的库,使用户能够有效地执行数据分析。

了解Pandas DataFrame append()

Pandas DataFrame append()函数合并另一个DataFrame对象中的行。 DataFrame append()函数返回一个新的DataFrame对象,并且不会更改源对象。您需要分配回附加的DataFrame,因为熊市猫DataFrame.append不能像纯Python附加一样在原地工作。 append()方法不适用于原地。

句法

DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=None)

参量

append()函数有5个参数。

  • 其他:是DataFrame或系列。
  • ignore_index:如果此参数为true,则不要使用索引标签。
  • verify_integrity:这也是一个布尔值,默认情况下为false。如果为true,则在创建具有重复项的索引时会引发ValueError。
  • sort:如果self和other的列不对齐,则对所有列进行排序。

返回值

df.append()函数返回一个附加的DataFrame。

Pandas DataFrame append()上的示例程序

编写一个程序来展示Python中append()方法的工作方式。

import pandas as pd

data_set1 = {
    'Name': ['Rohit', 'Mohit', 'Sohit', 'Arun', 'Shubh'],
    'Roll no': ['01', '02', '03', '04', '05'],
    'maths': ['93', '63', '74', '94', '83'],
    'science': ['88', '55', '66', '94', '35'],
    'english': ['93', '74', '84', '92', '87']}

data_set2 = {
    'Name': ['Karan', 'Rishu', 'Swetank', 'Rishabh', 'Shuvam'],
    'Roll no': ['06', '07', '08', '09', '10'],
    'maths': ['95', '62', '64', '14', '63'],
    'science': ['58', '59', '86', '74', '55'],
    'english': ['96', '77', '89', '42', '87']}

# Changing the above dictionary into dataframe
df1 = pd.DataFrame(data_set1)
df2 = pd.DataFrame(data_set2)
print("df1:n", df1, "nndf2:n", df2)
print("nAppended Dataframe:n")
print(df1.append(df2))

输出量

df1:
     Name Roll no maths science english
0  Rohit      01    93      88      93
1  Mohit      02    63      55      74
2  Sohit      03    74      66      84
3   Arun      04    94      94      92
4  Shubh      05    83      35      87

df2:
       Name Roll no maths science english
0    Karan      06    95      58      96
1    Rishu      07    62      59      77
2  Swetank      08    64      86      89
3  Rishabh      09    14      74      42
4   Shuvam      10    63      55      87

Appended Dataframe:

      Name Roll no maths science english
0    Rohit      01    93      88      93
1    Mohit      02    63      55      74
2    Sohit      03    74      66      84
3     Arun      04    94      94      92
4    Shubh      05    83      35      87
0    Karan      06    95      58      96
1    Rishu      07    62      59      77
2  Swetank      08    64      86      89
3  Rishabh      09    14      74      42
4   Shuvam      10    63      55      87

在上面的示例中,我们创建了两个数据框并打印了该数据框。然后,我们使用append()函数附加两个DataFrame的数据,然后打印数据。

将两个这样的Dataframe的数据附加到具有某些NaN值的附加DataFrame上。

请参阅以下代码。

import pandas as pd

dataframe1 = pd.DataFrame({"Col1": [1, 2, 3], "Col2": [4, 5, 6]})
dataframe2 = pd.DataFrame({"Col1": [1, 2, 3, 4], "Col2": [
                          5, 6, 7, 8], "Col3": [3, 5, 6, 7]})
dataframe3 = dataframe1.append(dataframe2, ignore_index=True, sort=False)
print(dataframe3)

输出量

 Col1  Col2  Col3
0     1     4   NaN
1     2     5   NaN
2     3     6   NaN
3     1     5   3.0
4     2     6   5.0
5     3     7   6.0
6     4     8   7.0

在这里,我们创建了两个数据框。在第一个DataFrame中,第二三列中有2列。

因此,当我们追加时,对于第几行,col 3的值将为NaN,因为第一个DataFrame中不存在col3的值。

为重复索引提高ValueError。

如果两个DataFrame对象中有重复的索引,我们可以传递verify_integrity = True引发ValueError。

import pandas as pd

df1 = pd.DataFrame({'Name': ['Krunal', 'Ankit'], 'ID': [11, 21]})
df2 = pd.DataFrame({'Name': ['Niva', 'Mansi'], 'ID': [19, 46]})

df3 = df1.append(df2, verify_integrity=True)

输出量

Traceback (most recent call last):
  File "app.py", line 6, in 
    df3 = df1.append(df2, verify_integrity=True)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/frame.py", line 7081, in append
    return concat(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 271, in concat
    op = _Concatenator(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 452, in __init__
    self.new_axes = self._get_new_axes()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 515, in _get_new_axes
    return [
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 516, in 
    self._get_concat_axis() if i == self.axis else self._get_comb_axis(i)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 572, in _get_concat_axis
    self._maybe_check_integrity(concat_axis)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/reshape/concat.py", line 580, in _maybe_check_integrity
    raise ValueError(
ValueError: Indexes have overlapping values: Int64Index([0, 1], dtype="int64")

在输出中,您可以看到ValueError:索引具有重叠的值:Int64Index([0, 1],dtype =’int64’)已引发。

现在,让我们看另一个没有重复索引的示例。

import pandas as pd

dataframe1 = pd.DataFrame({"Col1": [1, 2, 3], "Col2": [4, 5, 6]})
dataframe2 = pd.DataFrame({"Col1": [7, 8, 9], "Col2": [10, 11, 12]})

dataframe3 = dataframe1.append(dataframe2, ignore_index=True, sort=False)
print(dataframe3)

输出量

     Col1  Col2
0     1     4
1     2     5
2     3     6
3     7    10
4     8    11
5     9    12

您可以看到col1和col2值在dataframe3中合并了。

追加具有非匹配列的DataFrame对象

import pandas as pd

df1 = pd.DataFrame({'Name': ['Krunal', 'Simpson'], 'ID': [1, 2]})
df2 = pd.DataFrame({'Name': ['Krunal', 'Homer'], 'ID': [
                   3, 4], 'Role': ['MD', 'CTO']})

df3 = df1.append(df2, sort=False)
print(df3)

输出量

Name  ID Role
0   Krunal   1  NaN
1  Simpson   2  NaN
0   Krunal   3   MD
1    Homer   4  CTO

我们显式传递参数sort = False以避免对列进行排序并忽略FutureWarning。如果您不传递sort = False参数,则输出将包含以下警告消息。

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': ['Krunal', 'Simpson'], 'ID': [1, 2]})
df2 = pd.DataFrame({'Name': ['Krunal', 'Homer'], 'ID': [
                   3, 4], 'Role': ['MD', 'CTO']})

df3 = df1.append(df2, sort=True)
print(df3)

输出量

    ID    Name Role
0   1   Krunal  NaN
1   2  Simpson  NaN
0   3   Krunal   MD
1   4    Homer  CTO

请注意,列在结果DataFrame对象中排序。请注意,此功能已被弃用,将从将来的版本中删除。

在Pandas DataFrame中插入和删除行

如我们所见,您可以使用.append()方法将john作为新行添加到df的末尾。

让我们创建一个DataFrame和一个序列,然后使用append()方法将该序列附加到DataFrame。

import pandas as pd

df = pd.DataFrame({'Name': ['Krunal', 'Simpson'], 'ID': [1, 2]})
series = pd.Series(data={'Name': 'Elsa', 'ID': 21})

df2 = df.append(series, ignore_index=True)
print(df2)

输出量

      Name  ID
0   Krunal   1
1  Simpson   2
2     Elsa  21

在这里,.append()返回添加了新行的Pandas DataFrame。请注意,Pandas如何使用属性值series.Name和series.ID(即Elsa和21的值)来指定新行的标签。

这就对了。我们在DataFrame中添加了新行。您只需单击一次.append()就添加了新行,并且只需单击一次.drop()就可以将其删除。

使用for循环将行追加到pd.DataFrame

使用for循环将行追加到pandas.DataFrame时,使用for循环遍历行列表,最终导致将它们添加到DataFrame中。

在for循环中

  1. 使用zip(keys,values)将列名作为键与列数据作为值组合。
  2. 使用dict(zipped)使用压缩的迭代器创建字典。
  3. 将创建的字典存储在列表中。

然后,使用pandas.Dataframe.append(data,ignore_index = None)将称为数据的字典列表追加到现有DataFrame中。将ignore_index设置为True可保留DataFrame索引。

请参阅以下代码。

import pandas as pd

df = pd.DataFrame({'A': 1, 'B': 2, 'C': 3}, index=[0])
print(df)

columns = list(df)
data = []

for i in range(4, 10, 3):
    values = [i, i+1, i+2]
    zipped = zip(columns, values)
    a_dictionary = dict(zipped)
    data.append(a_dictionary)

print('After appending rows using for loop:')
df = df.append(data, True)
print(df)

输出量

   A  B  C
0  1  2  3
After appending rows using for loop:
   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9

在此示例中,首先,我们创建了一个DataFrame并打印了该DataFrame。然后,我们使用list()方法获得了该DataFrame的列。最后,我定义了一个空列表。

在for循环中,首先,我们创建一个由3个值组成的列表,该值增加1。然后我们创建一个迭代器,然后使用dict()方法将其转换为字典,然后将数据附加到列表中。

然后,我已使用df.append()函数将该数据附加到DataFrame。您可以看到我们添加了索引为1和2的行。

我们使用range()函数在循环中添加了两行,分别是for循环,zip()函数,dict()函数,列表append()和df.append()函数。

不建议使用此方法来附加DataFrame,因为它会花费更多时间。

结论

在此示例中,我们看到了如何将一个DataFrame附加到另一个DataFrame,如何将数据添加到DataFrame,将行添加到DataFrame,将多行添加到DataFrame,以及使用for循环添加数据。

最后,Pandas DataFrame append()方法示例结束。

也可以看看

熊市猫DataFrame groupby()

熊市猫DataFrame drop()

熊市猫DataFrame count()

熊市猫DataFrame位置[]

熊市猫DataFrame reset_index()

资讯来源:由0x资讯编译自APPDIVIDEND,版权归作者Ankit Lathiya所有,未经许可,不得转载
你可能还喜欢