文章目录

  • 一、什么是pandas
  • 1. 起源与发展
  • 2. 数据结构
  • 3. 主要功能
  • 4. 进阶功能
  • 5. 总结
  • 二、pandas核心方法
  • 1. 数据读取与写入
  • 2. 数据查看与选择
  • 3. 数据清洗与处理
  • 4. 数据统计与描述
  • 5. 数据变形与转换
  • 6. 数据合并与连接
  • 7. 分组与聚合
  • 8. 数据应用与自定义函数
  • 9. 其他常用方法
  • 三、主要方法使用示例
  • 1. 查看数据
  • 2. 选择数据
  • 3. 数据清洗
  • 4. 数据统计
  • 5. 数据排序
  • 6. 数据分组与聚合
  • 7. 数据合并
  • 8. 应用函数
  • 9. 唯一值和计数
  • 四、使用示例
  • 参考


一、什么是pandas

Python的pandas包是一个强大的数据分析工具,它提供了丰富的数据结构和函数,使得数据清洗、处理和分析变得简单高效。以下是关于pandas包的详细介绍:

1. 起源与发展

  • pandas最初由AQR Capital Management于2008年4月开发,作为金融数据分析工具。
  • 它于2009年底开源,并由PyData开发团队继续开发和维护。
  • pandas的名称来源于面板数据(panel data)和Python数据分析(data analysis)的结合。

2. 数据结构

  • Series:一维数组结构,与NumPy的一维数组类似,但可以保存不同类型的数据,如字符串、布尔值、数字等。
  • DataFrame:二维表格型数据结构,类似于R中的data.frame,可以理解为Series的容器。
  • Panel:三维数组结构,可以理解为DataFrame的容器,不过在实际应用中较少使用。

3. 主要功能

  • 数据读取:支持从多种格式的文件中读取数据,如CSV、Excel、SQL数据库等。
  • 数据清洗:提供了处理缺失值、重复值和异常值的方法,如dropna()、fillna()和drop_duplicates()等。
  • 数据转换:可以轻松地对数据进行排序、分组、透视等操作。
  • 数据统计:提供了丰富的统计函数,如mean()、median()、std()等,用于计算数据的统计特征。
  • 数据可视化:虽然pandas本身不专注于可视化,但它可以与其他可视化库(如matplotlib、seaborn等)无缝集成,实现数据的可视化展示。

4. 进阶功能

  • 创建复杂数据结构:如从字典、列表、文件或数据库中创建DataFrame。
  • 数据遍历:提供了apply()、iterrows()、itertuples()等方法来遍历数据。
  • 数据修改:可以使用lambda匿名函数对数据进行批量修改。
  • 新增数据:可以方便地向DataFrame中添加新行或新列。

5. 总结

pandas是一个功能强大且易于使用的Python数据分析包,它提供了丰富的数据结构和函数来简化数据处理和分析的过程。无论是初学者还是经验丰富的数据分析师,都可以利用pandas轻松地完成数据清洗、转换、统计和可视化等任务。

二、pandas核心方法

以下是一些Pandas的常用方法:

1. 数据读取与写入

  • read_csv(file, …): 读取CSV文件并返回DataFrame。
  • read_excel(file, …): 读取Excel文件并返回DataFrame。
  • to_csv(file, …): 将DataFrame写入CSV文件。
  • to_excel(file, …): 将DataFrame写入Excel文件。

2. 数据查看与选择

  • head(n=5): 返回前n行数据。
  • tail(n=5): 返回后n行数据。
  • loc[label, …]: 基于标签选择数据。
  • iloc[index, …]: 基于位置选择数据。

3. 数据清洗与处理

  • dropna(axis=0, …): 删除包含缺失值的行或列。
  • fillna(value=None, …): 用指定值填充缺失值。
  • replace(to_replace, value=None, …): 替换指定值。
  • drop_duplicates(subset=None, …): 删除重复行。

4. 数据统计与描述

  • describe(): 生成描述性统计信息,包括均值、标准差、最小值、25%、50%、75%分位数和最大值。
  • mean(), median(), std(), var(), min(), max(): 计算数据的各种统计量。计算平均值、中位数、标准差、方差、最小值、最大值。
  • count(): 计算非空值的数量。
  • corr(method=‘pearson’, …): 计算相关性系数。

5. 数据变形与转换

  • sort_values(by, …): 按照指定列进行排序。
  • reset_index(drop=False, …): 重置索引,drop参数决定是否保留原索引作为一列。
  • set_index(keys, …): 将指定列设置为索引。
  • melt(id_vars=None, …): 将DataFrame从宽格式转换为长格式。
  • pivot(index=None, columns=None, values=None): 创建数据透视表。
  • pivot_table(values, index=None, columns=None, aggfunc=‘mean’, …): 创建一个数据透视表,可以使用不同的聚合函数。

6. 数据合并与连接

  • merge(right, how=‘left’, …): 将两个DataFrame按指定方式进行合并,类似于SQL类型的合并。
  • concat(objs, axis=0, …): 在指定轴上连接两个或多个DataFrame。
  • join(other, on=None, how=‘left’, …): 基于索引或指定列进行连接。

7. 分组与聚合

  • groupby(by=None, axis=0, …): 对数据进行分组。
  • aggregate(func, axis=0, …)agg(func, axis=0, …): 对分组后的数据进行聚合计算,如求和、平均值等。可以应用多种聚合函数。

8. 数据应用与自定义函数

  • apply(func, axis=0, …): 对DataFrame的列或行应用自定义函数。可以传入lambda函数或定义好的函数进行操作。
  • map(func, …): 对Series的每个元素应用函数,通常用于数据转换或映射新值。
  • applymap(func): 对DataFrame中的每个元素应用函数。

9. 其他常用方法

  • unique(): 获取Series中的唯一值。
  • nunique(): 获取Series中唯一值的数量。
  • isnull()notnull(): 检测缺失值和非缺失值,返回一个布尔型Series。
  • astype(dtype, …): 转换DataFrame或Series的数据类型。
  • copy(deep=True): 复制DataFrame或Series,deep参数决定是否进行深拷贝。

这些方法涵盖了Pandas库的大部分常用功能,可以满足数据清洗、处理、分析和可视化的需求。在实际应用中,可以根据具体任务选择合适的方法进行数据处理和分析。

三、主要方法使用示例

以下是一些pandas主要方法的使用示例代码:

首先,我们导入pandas库并创建一个简单的DataFrame作为示例数据。

import pandas as pd

# 创建一个简单的DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 32, 18, 47],
    'City': ['New York', 'Paris', 'London', 'Tokyo'],
    'Score': [85, 90, 78, 92]
}
df = pd.DataFrame(data)

现在,我们将通过示例代码展示一些pandas的主要方法:

1. 查看数据

# 查看前几行数据
print(df.head(2))  # 查看前两行

# 查看后几行数据
print(df.tail(2))  # 查看最后两行

2. 选择数据

# 选择单列
print(df['Name'])  # 选择Name列

# 选择多列
print(df[['Name', 'Age']])  # 选择Name和Age列

# 使用条件选择行
print(df[df['Age'] > 30])  # 选择年龄大于30的行

3. 数据清洗

# 替换Score列中的值
df['Score'] = df['Score'].replace(90, 95)  # 将Score列中的90替换为95

# 删除包含缺失值的行(假设我们在Age列中引入了一个NaN值)
df.loc[2, 'Age'] =   # 将Charlie的年龄设置为缺失值
df_cleaned = df.dropna(subset=['Age'])  # 删除Age列有缺失值的行
print(df_cleaned)

4. 数据统计

# 描述性统计
print(df['Age'].describe())  # 对Age列进行描述性统计

# 计算相关性系数
print(df.corr())  # 计算各列之间的相关性系数

5. 数据排序

# 按Score列降序排序
print(df.sort_values(by='Score', ascending=False))

6. 数据分组与聚合

# 按City列分组,并计算每组的平均年龄
print(df.groupby('City')['Age'].mean())

7. 数据合并

# 创建一个新的DataFrame用于合并
df2 = pd.DataFrame({
    'Name': ['Bob', 'Eve'],
    'Occupation': ['Engineer', 'Doctor']
})

# 根据Name列合并df和df2
df_merged = pd.merge(df, df2, on='Name', how='left')
print(df_merged)

8. 应用函数

# 对Age列应用一个函数,将年龄增加1岁
df['Age'] = df['Age'].apply(lambda x: x + 1 if pd.notnull(x) else x)
print(df)

9. 唯一值和计数

# 获取City列的唯一值
print(df['City'].unique())

# 获取City列唯一值的数量
print(df['City'].nunique())

这些示例代码涵盖了pandas库中的一些主要方法。当然,pandas提供了非常丰富的功能,这里只是展示了其中的一部分。你可以根据自己的需求进一步探索和学习pandas的更多功能。

四、使用示例

以下是一个简单的使用pandas进行数据处理的实际例子。

假设你有一个CSV文件,里面包含了某公司销售数据,包括销售日期、产品名称、销售量和销售额。你想要对这个数据文件进行分析,了解各个产品的销售情况。

首先,你需要安装pandas库(如果还没有安装的话):

pip install pandas

然后,你可以使用以下Python代码来读取CSV文件,并进行一些基本的数据分析:

import pandas as pd

# 读取CSV文件
data = pd.read_csv('sales_data.csv')

# 查看数据的前几行
print(data.head())

# 统计每个产品的销售总量
sales_volume_by_product = data.groupby('产品名称')['销售量'].sum()
print('-'*5,'统计每个产品的销售总量','-'*5)
print(sales_volume_by_product)

# 统计每个产品的平均销售额
average_sales_by_product = data.groupby('产品名称')['销售额'].mean()
print('-'*5,'统计每个产品的平均销售额','-'*5)
print(average_sales_by_product)

# 找出销售额最高的产品
top_selling_product = data.groupby('产品名称')['销售额'].sum().idxmax()
print('-'*5,'找出销售额最高的产品','-'*5)
print(f"销售额最高的产品是:{top_selling_product}")

# 过滤出销售额大于某个阈值(比如3000)的销售记录
high_sales = data[data['销售额'] > 3000]
print('-'*5,'过滤出销售额大于某个阈值','-'*5)
print(high_sales)

# 按照销售日期对销售量进行累加,以了解销售趋势
cumulative_sales = data.groupby('销售日期')['销售量'].cumsum()
print('-'*5,'按照销售日期对销售量进行累加','-'*5)
print(cumulative_sales)

在这个例子中,我们首先使用pd.read_csv函数读取了一个名为sales_data.csv的CSV文件,并将其存储在名为data的DataFrame对象中。然后,我们使用groupby方法按产品名称对数据进行分组,并计算了每个产品的销售总量和平均销售额。接着,我们找出了销售额最高的产品,并过滤出了销售额大于3000的销售记录。最后,我们按销售日期对销售量进行了累加,以了解销售趋势。

请注意,这个例子假设CSV文件具有相应的列名(如’销售日期’、‘产品名称’、‘销售量’和’销售额’)。你需要根据你的实际数据文件格式和内容来调整代码。

参考