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, indf3 = 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循环中
- 使用zip(keys,values)将列名作为键与列数据作为值组合。
- 使用dict(zipped)使用压缩的迭代器创建字典。
- 将创建的字典存储在列表中。
然后,使用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()