数据合并与连接

在实际业务中,数据往往来自不同的渠道或时间段,可能需要将它们合并后进行分析。pandas提供了两种主要方式来完成这一任务:

首先是数据合并

  • 合并数据使用 `concat()` 方法可以将多个数据集(DataFrame)按行或列拼接在一起。

下面提供了一个示例,帮助我们理解如何合并多个数据集,并使用 concat() 来高效地处理数据合并任务。

提示词示例:

提示词:

请编写一个 Python 脚本,使用 pandas 读取多个 CSV 文件(如 data1.csv 和 data2.csv)。然后,使用 concat() 方法将这些文件按行(即将数据垂直合并)合并成一个完整的数据集。请确保合并后的数据集能够正确包含所有行,并去掉重复的列名。最终,将合并后的数据保存为新的 CSV 文件 merged_data.csv,并在合并过程中处理可能发生的错误。

示例代码:

import pandas as pd

try:
    # 读取多个 CSV 文件
    df1 = pd.read_csv('data1.csv')
    df2 = pd.read_csv('data2.csv')
    print("成功读取 'data1.csv' 和 'data2.csv' 文件。")
    
    # 使用 concat() 按行合并数据
    df_merged = pd.concat([df1, df2], ignore_index=True)
    print("成功按行合并数据。")
    
    # 将合并后的数据保存为新的 CSV 文件
    df_merged.to_csv('merged_data.csv', index=False)
    print("合并后的数据已保存为 'merged_data.csv'。")
    
except Exception as e:
    print(f"处理过程中发生错误:{e}")

代码说明

  • 使用 pd.read_csv() 读取多个 CSV 文件(data1.csvdata2.csv)。
  • 使用 pd.concat() 将这两个 DataFrame 按行拼接在一起,ignore_index=True 确保合并后重置索引。
  • 使用 to_csv() 将合并后的数据保存到新的文件 merged_data.csv
  • 异常处理:通过 try-except 捕获文件读取、合并等过程中可能发生的错误,并输出详细的错误信息。
接下来我们来学习数据连接
  • 连接数据:使用 merge() 方法可以根据共同的键(类似于SQL中的JOIN操作)连接不同的数据表,以实现联合分析。
下面我们通过一个示例来学习如何整合来自不同源的数据,我们会通过 merge() 连接两个数据表,然后基于共同的字段进行有效的联合分析。

提示词示例:

提示词:

请编写一个 Python 脚本,使用 pandas 读取两个 CSV 文件(如 data1.csv 和 data2.csv)。这两个文件中都有一个共同的字段“id”,请使用 merge() 方法根据“id”字段连接这两个数据表。连接方式使用内连接(inner join),确保只保留在两个数据表中都存在的“id”值对应的行。最后,将合并后的数据保存为新的 CSV 文件 merged_data.csv,并确保在处理过程中如果出现任何错误,能够输出详细的错误信息。

示例代码:

import pandas as pd

try:
    # 读取两个 CSV 文件
    df1 = pd.read_csv('data1.csv')
    df2 = pd.read_csv('data2.csv')
    print("成功读取 'data1.csv' 和 'data2.csv' 文件。")
    
    # 使用 merge() 根据 "id" 字段连接两个数据表(内连接)
    df_merged = pd.merge(df1, df2, on='id', how='inner')
    print("根据 'id' 字段成功连接数据。")
    
    # 将合并后的数据保存为新的 CSV 文件
    df_merged.to_csv('merged_data.csv', index=False)
    print("合并后的数据已保存为 'merged_data.csv'。")
    
except Exception as e:
    print(f"处理过程中发生错误:{e}")

代码说明

  • 使用 pd.read_csv() 读取 data1.csvdata2.csv 文件。
  • 使用 pd.merge() 方法根据共同的字段“id”进行内连接,on='id' 指定连接的字段,how='inner' 表示使用内连接(即只保留两个数据表中都有的“id”对应的行)。
  • 使用 to_csv() 方法将合并后的数据保存到新的 CSV 文件 merged_data.csv 中。
  • 异常处理:通过 try-except 捕获在读取、连接或保存数据时可能发生的错误,并输出详细的错误信息。

除了用于数据清洗,以及数据清洗与预处理外,pandas 还可以用于数据分析与统计和数据可视化。

数据分析与统计

在数据分析中,我们通常使用 pandas 提供的内置函数 describe() 来快速获取数据的基本统计信息,包括均值、标准差、最大值、最小值等。这些统计信息有助于我们了解数据的基本特性,如数据的集中趋势、分散程度等。

示例代码:

import pandas as pd

# 读取数据
df = pd.read_csv('example.csv')

# 获取数据的基本统计信息
summary_statistics = df.describe()

# 输出统计信息
print(summary_statistics)

代码说明:

  • pd.read_csv() 用于读取 example.csv 文件中的数据。
  • df.describe() 返回数据框中所有数值列的基本统计信息,包括计数、均值、标准差、最小值、最大值以及四分位数等。
  • 使用 print() 输出这些统计信息,帮助快速了解数据集的分布情况。

数据可视化

数据可视化是帮助我们直观理解数据分布和趋势的重要工具。这里使用 matplotlib 库来绘制一个简单的直方图,显示数据在某一列(如“age”列)中的分布情况。

示例代码:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv('example.csv')

# 绘制“age”列的直方图
plt.figure(figsize=(8, 6))
plt.hist(df['age'], bins=10, edgecolor='black', color='skyblue')

# 添加标题和标签
plt.title('Age Distribution', fontsize=14)
plt.xlabel('Age', fontsize=12)
plt.ylabel('Frequency', fontsize=12)

# 显示图表
plt.show()

代码说明:

  • pd.read_csv() 读取 example.csv 文件中的数据。
  • plt.hist() 绘制直方图,df['age'] 提供数据源,bins=10 设置直方图的区间数(即把数据分为多少个区间),edgecolor='black' 设置柱状图的边框颜色,color='skyblue' 设置柱子的填充颜色。
  • plt.title(), plt.xlabel(), plt.ylabel() 分别用于设置图表的标题和坐标轴标签。
  • plt.show() 显示绘制的图表。

练习:

  1. 在连接数据的示例中,merge() 方法目前只支持内连接,如果需要其他连接方式(如左连接、右连接、外连接),就需要修改代码。现在,请您设计一个提示词,通过在脚本中增加一个参数,让用户选择连接方式,或者根据实际情况自动判断连接方式。
  2. 我们目前示例脚本中只能绘制直方图。请修改代码,通过增加参数,让用户可以自己选择绘制其他日常工作中常用的图表,如:折线图(Line chart)、散点图(Scatter plot)、柱状图(Bar chart)、饼图(Pie chart)和箱线图(Box plot),或挑战更高级的图表,如:热力图(Heatmap)、等高线图(Contour plot)、三维图(3D plot)、极坐标图(Polar plot)、小提琴图(Violin plot)等。

AI 助教

提示:您可在此提出学习中遇到的问题。回答由 AI 生成,可能存在错误,请注意甄别。