Pandas 是一个强大的数据处理库,提供了有效操作结构化数据的数据结构和函数。Pandas 中一个关键的数据结构是 DataFrame,可以被视为一个表格或电子表格。在本文中,我们将探讨如何使用各种方法和场景将数据附加到 DataFrame。
将数据附加到 DataFrame 是数据分析和处理任务中的常见操作。它涉及向现有 DataFrame 添加新行或列,从而扩展数据集。Pandas 提供了几种执行此操作的方法,每种方法适用于不同的场景和需求。
1. 向 DataFrame 添加行
最常见的操作之一是向 DataFrame 添加行。这可以使用 append()
方法完成,该方法允许您向 DataFrame 添加一行或多行。
示例 1:使用字典追加单行
导入 pandas 作为 pd
# 创建一个数据框
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
# 创建一个表示新行的字典
new_row = {'Name': 'Charlie', 'Website': 'pandasdataframe.com', 'Age': 35}
# 将行附加到 DataFrame
df = df._append(new_row, ignore_index=True)
print(df)
输出:
示例 2:使用字典列表追加多行
导入 pandas 作为 pd
# 创建一个数据框
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
# 创建一个表示新行的字典列表
new_rows = [
{'Name': 'Charlie', 'Website': 'pandasdataframe.com', 'Age': 35},
{'Name': 'David', 'Website': 'pandasdataframe.com', 'Age': 40}
]
# 将行附加到 DataFrame
df = df._append(new_rows, ignore_index=True)
print(df)
输出:
- 追加数据框
另一个常见的场景是将一个 DataFrame 附加到另一个 DataFrame。这在您有数据分散在多个 DataFrame 中并且想要将它们合并为一个单一的 DataFrame 时非常有用。
示例 3:追加两个 DataFrame
导入 pandas 作为 pd
# 创建两个数据框
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'姓名': ['Charlie', 'David'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': [35, 40]
})
# 将 df2 附加到 df1
df = df1._append(df2, ignore_index=True)
print(df)
输出:
示例 4:使用 Concat 追加多个 DataFrame
导入 pandas 作为 pd
# 创建三个数据框
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'姓名': ['Charlie', 'David'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': [35, 40]
})
df3 = pd.DataFrame({
'姓名': ['Eve', 'Frank'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': [45, 50]
})
# 使用 concat 来附加所有 DataFrames
df = pd.concat([df1, df2, df3], ignore_index=True)
print(df)
输出:
- 向 DataFrame 添加列
除了添加行,您可能还需要向 DataFrame 添加列。这可以通过简单地将新列分配给 DataFrame 来完成。
示例 5:追加单列
导入 pandas 作为 pd
# 创建一个数据框
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Age': [25, 30]
})
# 添加新列
df['网站'] = ['pandasdataframe.com', 'pandasdataframe.com']
print(df)
输出:
示例 6:使用 DataFrame 添加多个列
导入 pandas 作为 pd
# 创建一个数据框
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Age': [25, 30]
})
# 创建另一个包含新列的数据框
new_columns = pd.DataFrame({
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Score': [88, 92]
})
# 将新列附加到原始 DataFrame
df = pd.concat([df, new_columns], axis=1)
print(df)
输出:
- 追加时处理索引
在追加数据时,正确管理索引非常重要,以避免重复索引的问题。Pandas 提供了几种选项来处理追加操作中的索引。
示例 7:追加后重置索引
导入 pandas 作为 pd
# 创建两个数据框
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'姓名': ['Charlie', 'David'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': [35, 40]
})
# 将 df2 附加到 df1 并重置索引
df = df1._append(df2, ignore_index=True)
print(df)
输出:
示例 8:使用 Concat 和 Sort
导入 pandas 作为 pd
# 创建三个数据框
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'姓名': ['Charlie', 'David'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': [35, 40]
})
df3 = pd.DataFrame({
'姓名': ['Eve', 'Frank'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': [45, 50]
})
# 使用 concat 来附加所有 DataFrames 并排序索引
df = pd.concat([df1, df2, df3], ignore_index=True, sort=True)
print(df)
输出:
- 使用不同列名进行追加
有时,您想要追加的 DataFrame 可能没有相同的列名。在这种情况下,您可以使用 rename
方法在追加之前对齐列名。
示例 9:使用重命名对齐列名
导入 pandas 作为 pd
# 创建两个具有不同列名的数据框
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'姓名': ['Charlie', 'David'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': [35, 40]
})
# 重命名 df2 中的列以匹配 df1
df2.rename(columns={'PersonName': 'Name', 'Site': 'Website', 'Years': 'Age'}, inplace=True)
# 将 df2 附加到 df1
df = df1._append(df2, ignore_index=True)
print(df)
输出:
- 添加缺失列
在追加 DataFrame 时,您可能会遇到一个 DataFrame 具有另一个 DataFrame 没有的列的情况。Pandas 通过用 NaN 值填充缺失的列来优雅地处理这一情况。
示例 10:附加具有缺失列的数据框
导入 pandas 作为 pd
# 创建两个具有不同列的 DataFrame
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'姓名': ['Charlie', 'David'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'分数': [88, 92]
})
# 将 df2 附加到 df1
df = df1._append(df2, ignore_index=True)
print(df)
输出:
在生成的 DataFrame 中,来自 df2 的行的 ‘Age’ 列将填充 NaN,而来自 df1 的行的 ‘Score’ 列将填充 NaN。
- 使用不同数据类型追加
Pandas 还处理不同数据类型的列的追加。如果一个 DataFrame 中的列与另一个 DataFrame 中的对应列的数据类型不同,Pandas 将尝试将数据类型转换为可以容纳所有值的公共类型。
示例 11:附加具有不同数据类型的 DataFrame
导入 pandas 作为 pd
# 创建两个具有不同数据类型的数据框
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'姓名': ['Charlie', 'David'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': ['35', '40']
})
# 将 df2 附加到 df1
df = df1._append(df2, ignore_index=True)
print(df)
输出:
在生成的 DataFrame 中,‘Age’ 列将是对象数据类型,因为它可以容纳整数和字符串值。
- 追加重复行
在追加数据框时,您可能会遇到重复行的情况。默认情况下,append
方法不会删除重复行。然而,您可以在追加后使用 drop_duplicates
方法来删除重复项。
示例 12:在追加后删除重复行
导入 pandas 作为 pd
# 创建两个包含重复行的数据框
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'姓名': ['Bob', 'Charlie'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': [30, 35]
})
# 将 df2 附加到 df1 并移除重复项
df = df1._append(df2, ignore_index=True).drop_duplicates()
print(df)
输出:
9. 使用不同索引追加
如果您要追加的 DataFrame 具有不同的索引,append
方法将默认保留原始索引。但是,您可以使用 ignore_index
参数来重置索引。
示例 13:合并具有不同索引的 DataFrame
导入 pandas 作为 pd
# 创建两个具有不同索引的 DataFrame
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
}, index=[1, 2])
df2 = pd.DataFrame({
'姓名': ['Charlie', 'David'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com'],
'年龄': [35, 40]
}, index=[3, 4])
# 将 df2 附加到 df1 并重置索引
df = df1._append(df2, ignore_index=True)
print(df)
输出:
- 追加排序
默认情况下,append
方法不会对列进行排序。如果您想对列进行排序,可以使用 sort
参数。
示例 14:带排序的追加数据框
导入 pandas 作为 pd
# 创建两个列顺序不同的数据框
df1 = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Website': ['pandasdataframe.com', 'pandasdataframe.com'],
'Age': [25, 30]
})
df2 = pd.DataFrame({
'年龄': [35, 40],
'姓名': ['Charlie', 'David'],
'网站': ['pandasdataframe.com', 'pandasdataframe.com']
})
# 将 df2 附加到 df1 并排序列
df = df1._append(df2, ignore_index=True, sort=True)
print(df)
输出:
总之,Pandas 中的 append
方法是一个多功能的工具,用于向 DataFrame 添加行或列。它提供了一系列选项来处理不同的场景和需求,使其成为数据处理和分析的强大工具。