Pandas 数据框附加-Pandas 数据框

内容

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)

输出:

Pandas DataFrame Append

示例 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)

输出:

Pandas DataFrame Append

  1. 追加数据框

另一个常见的场景是将一个 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)

输出:

Pandas DataFrame Append

示例 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)

输出:

Pandas DataFrame Append

  1. 向 DataFrame 添加列

除了添加行,您可能还需要向 DataFrame 添加列。这可以通过简单地将新列分配给 DataFrame 来完成。

示例 5:追加单列

导入 pandas 作为 pd
# 创建一个数据框
df = pd.DataFrame({
    'Name': ['Alice', 'Bob'],
    'Age': [25, 30]
})
# 添加新列
df['网站'] = ['pandasdataframe.com', 'pandasdataframe.com']
print(df)

输出:

Pandas DataFrame Append

示例 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 DataFrame Append

  1. 追加时处理索引

在追加数据时,正确管理索引非常重要,以避免重复索引的问题。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)

输出:

Pandas DataFrame Append

示例 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)

输出:

Pandas DataFrame Append

  1. 使用不同列名进行追加

有时,您想要追加的 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)

输出:

Pandas DataFrame Append

  1. 添加缺失列

在追加 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)

输出:

Pandas DataFrame Append

在生成的 DataFrame 中,来自 df2 的行的 ‘Age’ 列将填充 NaN,而来自 df1 的行的 ‘Score’ 列将填充 NaN。

  1. 使用不同数据类型追加

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)

输出:

Pandas DataFrame Append

在生成的 DataFrame 中,‘Age’ 列将是对象数据类型,因为它可以容纳整数和字符串值。

  1. 追加重复行

在追加数据框时,您可能会遇到重复行的情况。默认情况下,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)

输出:

Pandas DataFrame Append

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)

输出:

Pandas DataFrame Append

  1. 追加排序

默认情况下,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 DataFrame Append

总之,Pandas 中的 append 方法是一个多功能的工具,用于向 DataFrame 添加行或列。它提供了一系列选项来处理不同的场景和需求,使其成为数据处理和分析的强大工具。

总结
Pandas是Python中强大的数据处理库,提供了有效操作结构化数据的功能。本文探讨了如何向DataFrame中添加数据,包括添加行和列的多种方法。首先,使用`append()`方法可以向DataFrame添加单行或多行数据,示例中展示了如何通过字典和字典列表来实现。其次,可以将一个DataFrame追加到另一个DataFrame,适用于将分散的数据合并为一个整体。接着,介绍了如何添加新列,包括直接赋值和使用`concat`方法合并多个DataFrame。处理索引时,Pandas提供了选项以避免重复索引的问题。还讨论了在列名不一致时如何使用`rename`方法对齐列名,以及在某些列缺失时,Pandas会用NaN填充缺失的列。通过这些方法,用户可以灵活地扩展和管理DataFrame中的数据。