Pandas库使用教学(基础数据类型Series、DataFrame,利用pandas进行数据处理、数据分析)

发布于:2025-07-25 ⋅ 阅读:(15) ⋅ 点赞:(0)

Pandas库使用教学(基础数据类型Series、DataFrame,利用pandas进行数据处理、数据分析)

此文章共三节:

1. 基础数据类型

2. 利用pandas进行数据处理

3. 利用Pandas进行数据分析

Pandas基础数据类型

Pandas 是 Python 中用于数据处理和分析的强大库,它提供了两种主要的数据类型:SeriesDataFrame。下面将详细介绍这两种数据类型的创建、属性和基本操作。

1. Series

Series是一维带标签的数组,它可以保存任何数据类型(整数、字符串、浮点数等)。每个元素都有一个与之关联的标签,称为索引。

创建 Series

可以使用列表、字典等方式创建Series

import pandas as pd

# 使用列表创建Series(默认索引)
s_1 = pd.Series([1, 2, 3, 4, 5])
print("使用列表创建的Series(默认索引):")
print(s_1)

# 使用列表创建Series(自定义索引)
s_2 = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print("\n使用列表创建的Series(自定义索引):")
print(s_2)

# 使用字典创建Series
dic_1 = {"name1": "Peter", "name2": "tin", "name3": "rose"}
s_3 = pd.Series(dic_1)
print("\n使用字典创建的Series:")
print(s_3)

# 使用标量值创建Series
s_4 = pd.Series(10, index=['x', 'y', 'z'])
print("\n使用标量值创建的Series:")
print(s_4)
Series 的属性
  • index:获取索引。
  • values:获取值。
  • dtype:获取数据类型。
print("\nSeries的索引:")
print(s_1.index)
print(s_2.index)

print("\nSeries的值:")
print(s_1.values)
print(s_3.values)

print("\nSeries的数据类型:")
print(s_1.dtype)
print(s_3.dtype)
Series 的基本操作
  • 查询:可以通过索引访问单个或多个元素。
# 访问单个元素
print("\n访问单个元素:")
print(s_2['d'])

# 访问多个元素(切片)
print("\n访问多个元素(切片):")
print(s_2['a':'d'])

# 访问多个元素(指定索引列表)
print("\n访问多个元素(指定索引列表):")
print(s_2[['a', 'd']])

# 使用布尔索引查询
print("\n使用布尔索引查询:")
print(s_1[s_1 > 3])

  • 删除:使用drop方法删除指定索引的元素。
s_2 = s_2.drop('a')
print("\n删除元素后的Series:")
print(s_2)

  • 修改:可以直接通过索引修改元素的值。
s_3[0] = 'Tom'
print("\n修改元素后的Series:")
print(s_3)

s_3 = s_3.replace('Tom', 'Jerry')
print("\n替换元素后的Series:")
print(s_3)
  • 算术运算:可以对 Series 进行算术运算。
s_5 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s_6 = pd.Series([4, 5, 6], index=['a', 'b', 'c'])
print("\nSeries相加:")
print(s_5 + s_6)

2. DataFrame

DataFrame是二维带标签的数据结构,类似于电子表格或 SQL 表。它由行索引和列索引组成,每列可以是不同的数据类型。

创建 DataFrame

可以使用字典、二维数组等方式创建DataFrame

# 使用字典创建DataFrame
dic = {'name': ['kiti', 'beta', 'peter', 'tom'],
       'age': [20, 18, 35, 21],
       'gender': ['f', 'f', 'm', 'm']}
df = pd.DataFrame(dic)
print("\n使用字典创建的DataFrame:")
print(df)

import numpy as np
import pandas as pd

# 使用二维数组创建DataFrame
datas = pd.date_range('20180101', periods=5)
df1 = pd.DataFrame(np.arange(30).reshape(5, 6), index=datas, columns=['A', 'B', 'C', 'D', 'E', 'F'])
print("\n使用二维数组创建的DataFrame:")
print(df1)

# 使用Series创建DataFrame
s_name = pd.Series(['kiti', 'beta', 'peter', 'tom'])
s_age = pd.Series([20, 18, 35, 21])
df2 = pd.DataFrame({'name': s_name, 'age': s_age})
print("\n使用Series创建的DataFrame:")
print(df2)
DataFrame 的属性
  • index:获取行索引。
  • columns:获取列索引。
  • values:获取数据值。
  • shape:获取数据框的形状(行数和列数)。
print("\nDataFrame的行索引:")
print(df.index)

print("\nDataFrame的列索引:")
print(df.columns)

print("\nDataFrame的值:")
print(df.values)

print("\nDataFrame的形状:")
print(df.shape)
DataFrame 的基本操作
  • 修改列名和行名:可以直接赋值修改。
# 修改列名
df.columns = ['Name', 'Age', 'Gender']
print("\n修改列名后的DataFrame:")
print(df)

# 修改行名
df.index = range(1, len(df) + 1)
print("\n修改行名后的DataFrame:")
print(df)

  • 增加列和行:可以直接赋值增加列,使用loc方法增加行。
# 增加列
df['Score'] = [80, 90, 75, 85]
print("\n增加列后的DataFrame:")
print(df)

# 增加行
df.loc[5] = ['jack', 22, 'm', 92]
print("\n增加行后的DataFrame:")
print(df)

  • 查询:可以使用loc(标签索引)和iloc(位置索引)方法进行查询。
# 使用loc方法查询
print("\n使用loc方法查询某个值:")
print(df.loc[1, 'Name'])

print("\n使用loc方法查询某列值:")
print(df.loc[:, 'Age'])

print("\n使用loc方法查询某些行:")
print(df.loc[1:3, :])

# 使用iloc方法查询
print("\n使用iloc方法查询某个值:")
print(df.iloc[0, 1])

print("\n使用iloc方法查询某列值:")
print(df.iloc[:, 2])

print("\n使用iloc方法查询某些行:")
print(df.iloc[0:2, :])

  • 删除:可以使用del关键字或drop方法删除列和行。
# 删除列
del df['Score']
print("\n删除列后的DataFrame:")
print(df)

# 删除行
df = df.drop(5)
print("\n删除行后的DataFrame:")
print(df)

  • 排序:可以使用sort_values方法对数据框进行排序。
# 按年龄升序排序
df = df.sort_values(by=['Age'])
print("\n按年龄升序排序后的DataFrame:")
print(df)

# 按年龄降序排序
df = df.sort_values(by=['Age'], ascending=False)
print("\n按年龄降序排序后的DataFrame:")
print(df)

  • 值替换:可以使用replace方法替换数据框中的值。
df['Gender'] = df['Gender'].replace(['m', 'f'], ['male', 'female'])
print("\n值替换后的DataFrame:")
print(df)

通过以上内容,你应该对 Pandas 的两种基础数据类型SeriesDataFrame有了较为全面的了解。

接下来我们将学习   ”使用pandas数据处理“  以及  “利用Pandas进行数据分析”

利用 Pandas 进行数据处理教学

一、引言

Pandas 是 Python 中一个强大的数据处理和分析库,它提供了丰富的数据结构和函数,能够高效地处理和分析各种类型的数据。本教学将结合之前代码库中的示例,详细介绍 Pandas 在数据处理中的常见操作。

二、数据导入

在进行数据处理之前,首先需要将数据导入到 Python 环境中。Pandas 支持多种数据格式的导入,以下是几种常见的导入方式:

1. 导入 CSV 文件
import pandas as pd

# 导入 CSV 文件
df_1 = pd.read_csv("data1.csv")

# 如果文件存在编码问题,可以指定编码和引擎
df_2 = pd.read_csv("data2.csv", encoding='utf8', engine='python', header=None)
2. 导入 Excel 文件
# 导入 Excel 文件
df_3 = pd.read_excel("data3.xlsx")
3. 导入 TXT 文件
# 导入 TXT 文件,指定分隔符和表头
df_4 = pd.read_table("data4.txt", sep=',', header=None)

三、缺失值处理

在实际数据中,经常会存在缺失值的情况。Pandas 提供了多种处理缺失值的方法,包括数据补齐、删除对应数据行等。

# 导入包含缺失值的数据
df = pd.read_csv(r"C:\Users\Administrator\Desktop\new\数据处理\2.缺失值处理\data.csv",
                 encoding='gbk', engine='python')

# 进行逻辑判断,判定空值所在的位置
na = df.isnull()

# 找出空值所在的行数据
df[na.any(axis=1)]

# 找出空值所在的列数据
df[na[['gender']].any(axis=1)]

# 填充缺失值
df1 = df.fillna('1')

# 删除缺失值(删除整行数据)
df2 = df.dropna()

四、重复值处理

重复值可能会影响数据分析的结果,因此需要对其进行处理。Pandas 提供了查找和删除重复值的方法。

# 导入数据
df = pd.read_csv(r"C:\Users\Administrator\Desktop\new\数据处理\3.重复值处理\data1.csv",
                 encoding='gbk', engine='python')

# 找出重复值的位置
result1 = df.duplicated()

# 根据列名来判断重复
result2 = df.duplicated('gender')
result3 = df.duplicated(['gender', 'name'])

# 提取重复的行
df[result1]

# 删除重复的行
# 完全重复
new_df1 = df.drop_duplicates()

# 部分重复(根据某列名来删除)
new_df2 = df.drop_duplicates(['name', 'gender'])

五、数据抽取

根据一定条件抽取数据是数据处理中常见的操作。Pandas 支持比较运算、字符匹配和逻辑运算来进行数据抽取。

# 导入数据
df = pd.read_csv(
    r"C:\Users\Administrator\Desktop\new\数据处理\5.数据抽取\data1.csv",
    encoding='gbk', engine='python')

# 比较运算
# 抽取好评数大于 17000 的电脑
df[df['好评数'] > 17000]

# 抽取好评数在 15000 到 17000 之间的电脑
df[df['好评数'].between(15000, 17000)]

# 字符匹配
df[df['品牌'].str.contains('苹果', na=False)]

# 逻辑运算
# 取出价格小于 7000,好评大于 16000 的电脑
df[(df['价格'] < 7000) & (df['好评数'] > 16000)]

六、数据框的合并

在数据分析中,有时需要将多个数据框合并成一个。Pandas 提供了 concat() 函数来实现数据框的合并。

import numpy as np

# 创建数据框
df_1 = pd.DataFrame(np.arange(12).reshape(3, 4))
df_2 = 2 * df_1

# 竖向合并
new_df1 = pd.concat([df_2, df_1])

# 横向合并
new_df2 = pd.concat([df_1, df_2], axis=1)

# 使用 join 参数
df_3 = pd.DataFrame(np.arange(12).reshape(3, 4),
                    index=['A', 'B', 2])
new_df3 = pd.concat([df_1, df_3], axis=1, join='inner')
new_df4 = pd.concat([df_1, df_3], axis=1, join='outer')

七、合并数据框的列

可以使用 + 运算符将数据框的列进行拼接。

# 导入数据
df = pd.read_csv(
    r"C:\Users\Administrator\Desktop\new\数据处理\7.合并数据框的列\data1.csv",
    encoding='gbk', engine='python')

# 合并列
num = df['area'] + df['birthday'] + df['ranking'] + df['only']
df['id'] = num

八、merge() 函数

merge() 函数用于拼接两个数据框。

# 导入数据
df_1 = pd.read_csv(
    r"C:\Users\Administrator\Desktop\new\数据处理\8.merge函数\data1.csv",
    encoding='gbk', engine='python')
df_2 = pd.read_csv(
    r"C:\Users\Administrator\Desktop\new\数据处理\8.merge函数\data2.csv",
    encoding='gbk', engine='python')

# 根据 name 将两个数据框连接起来,删除各自数据框独有的信息
df_3 = pd.merge(df_1, df_2, left_on='name', right_on='name')

# 根据 name 将两个数据框连接起来,保留左边的信息
df_4 = pd.merge(df_1, df_2, left_on='name', right_on='name',
                how='left')

# 根据 name 将两个数据框连接起来,保留右边的信息
df_5 = pd.merge(df_1, df_2, left_on='name', right_on='name',
                how='right')

# 根据 name 将两个数据框连接起来,全部保留
df_6 = pd.merge(df_1, df_2, left_on='name', right_on='name',
                how='outer')

九、计算

在数据处理中,经常需要进行一些计算操作,例如计算总价。

# 导入数据
df = pd.read_csv(
    r"C:\Users\Administrator\Desktop\new\数据处理\9.计算\data1.csv",
    encoding='gbk', engine='python')

# 计算总价
df['总价'] = df['单价'] * df['数量']

十、随机抽样

Pandas 支持按照个数和比例进行随机抽样。

import numpy as np

# 创建数据框
df = pd.DataFrame(np.arange(600).reshape(100, 6),
                  columns=['A', 'B', 'C', 'D', 'E', 'F'])

# 设置随机种子
np.random.seed(seed=2)

# 按照个数抽样(不放回)
df.sample(n=10)

# 按照个数抽样(有放回)
df.sample(n=20, replace=True)

# 按照百分比抽样(不放回)
df.sample(frac=0.2)

# 按照百分比抽样(有放回)
new_df = df.sample(frac=0.2, replace=True)

十一、数据标准化

数据标准化可以消除量纲的影响,常见的标准化方式有 0~1 标准化和 Z 标准化。

# 导入数据
df1 = pd.read_csv(
    r"C:\Users\Administrator\Desktop\new\数据处理\11.数据标准化\data1.csv",
    encoding='gbk', engine='python')

# 0~1 标准化
df1['国内生产总值0~1标准化'] = \
    round((df1.国内生产总值 - df1.国内生产总值.min())
          / (df1.国内生产总值.max() - df1.国内生产总值.min()), 2)

df1['人均GDP 0~1标准化'] = \
    round((df1.人均GDP - df1.人均GDP.min())
          / (df1.人均GDP.max() - df1.人均GDP.min()), 2)

# Z 标准化
df1['国内生产总值Z标准化'] = \
    round((df1.国内生产总值 - df1.国内生产总值.mean())
          / (df1.国内生产总值.std()), 2)

df1['人均GDP Z标准化'] = \
    round((df1.人均GDP - df1.人均GDP.mean())
          / (df1.人均GDP.std()), 2)

十二、数据分组

cut() 函数可以对数据进行分组。

# 导入数据
df = pd.read_csv(
    r"C:\Users\Administrator\Desktop\new\数据处理\12.数据分组\data1.csv",
    encoding='gbk', engine='python')

# 对人均 GDP 进行分组
bins = [min(df.人均GDP) - 1, 2000, 4000, 6000, 8000, max(df.人均GDP) + 1]
df['人均GDP分组'] = pd.cut(df.人均GDP, bins)

# 自定义标签
labels = ['2000以下', '2001~4000', '4001~6000', '6001~8000', '8000以上']
df['人均GDP分组'] = pd.cut(df.人均GDP, bins, labels=labels)

十三、时间格式数据处理

Pandas 提供了 to_datetime() 函数来处理时间格式数据。

# 导入数据
df = pd.read_csv(
    r"C:\Users\Administrator\Desktop\new\数据处理\13.时间格式数据\data1.csv",
    encoding='gbk', engine='python')

# 将字符型时间数据转化为时间格式数据
df['时间'] = pd.to_datetime(df.购买时间, format='%Y/%m/%d')

# 将时间格式的数据转化为指定字符型数据
df['字符型时间'] = df.时间.dt.strftime('%Y/%m/%d')

# 提取时间格式数据中的年、月、周、日、时、分、秒
df['年'] = df['时间'].dt.year
df['月'] = df['时间'].dt.month
df['周'] = df['时间'].dt.weekday
df['日'] = df['时间'].dt.day
df['时'] = df['时间'].dt.hour
df['分'] = df['时间'].dt.minute
df['秒'] = df['时间'].dt.second

十四、数据导出

处理完数据后,需要将结果导出保存。Pandas 支持将数据导出为 CSV 和 Excel 格式。

# 导出为 CSV 文件
df_1.to_csv(
    r"C:\Users\Administrator\Desktop\new\数据处理\1. 数据导入与导出\导出.csv",
    index=True, header=True)

# 导出为 Excel 文件
df_1.to_excel(
    r"C:\Users\Administrator\Desktop\new\数据处理\1. 数据导入与导出\导出.xlsx",
    index=True, header=True)

利用 Pandas 进行数据分析教学

一、引言

Pandas 是 Python 中一个强大的数据分析库,它提供了丰富的数据结构和数据处理功能,如 Series 和 DataFrame,能够方便地进行数据读取、清洗、分析和可视化等操作。下面将结合之前的代码片段,详细介绍如何利用 Pandas 进行数据分析。

二、数据读取

Pandas 支持多种数据格式的读取,常见的有 CSV 和 Excel 文件。

1. 读取 CSV 文件
import pandas as pd

# 读取CSV文件
df = pd.read_csv(
    r"C:\Users\Administrator\Desktop\new\简单数据分析\1.统计描述\data1.csv",
    encoding='gbk', engine='python'
)
2. 读取 Excel 文件
import pandas as pd

# 读取Excel文件
df = pd.read_excel(
    r"C:\Users\Administrator\Desktop\new\简单数据分析\4.相关分析\data1.xlsx",
    encoding='gbk'
)

三、数据统计描述

统计描述可以帮助我们快速了解数据的基本特征,如数量、最大值、最小值、均值等。

# 基本统计数
print("基本统计数:")
print(df.成绩.describe())

# 成绩数量
count = df.成绩.size
print(f"成绩数量: {count}")

# 成绩的最大值
max_score = df.成绩.max()
print(f"成绩的最大值: {max_score}")

# 成绩的最小值
min_score = df.成绩.min()
print(f"成绩的最小值: {min_score}")

# 成绩的和
sum_score = df.成绩.sum()
print(f"成绩的和: {sum_score}")

# 成绩的均值
mean_score = df.成绩.mean()
print(f"成绩的均值: {mean_score}")

# 成绩的中位数
median_score = df.成绩.median()
print(f"成绩的中位数: {median_score}")

# 成绩的方差
var_score = df.成绩.var()
print(f"成绩的方差: {var_score}")

# 成绩的标准差
std_score = df.成绩.std()
print(f"成绩的标准差: {std_score}")

# 累计求和
cumsum_score = df.成绩.cumsum()
print("成绩的累计求和:")
print(cumsum_score)

# 最大值和最小值的位置
argmin_score = df.成绩.argmin()
argmax_score = df.成绩.argmax()
print(f"成绩最小值的位置: {argmin_score}")
print(f"成绩最大值的位置: {argmax_score}")

# 求百分位数(排序为30%的数值)
quantile_score = df.成绩.quantile(
    0.3,
    interpolation='nearest'
)
print(f"成绩排序为30%的数值: {quantile_score}")

四、数据分组统计

1. 使用groupby函数进行分组统计
import numpy as np

# 根据班级进行分组统计
result1 = df.groupby(by=['班级'])['成绩'].agg(
    {"总分": np.sum,
     "人数": np.size,
     "平均成绩": np.mean,
     "标准差": np.std}
)
print("根据班级分组统计结果:")
print(result1)

# 自定义分组
bins = [min(df.成绩) - 1, 70, 80, 90, max(df.成绩) + 1]
labels = ['70以下', '71~80', '81~90', '90以上']
df['分组'] = pd.cut(df.成绩, bins, labels=labels)

# 根据自定义分组进行分组统计
result2 = df.groupby(by=['分组'])['成绩'].agg(
    {"总分": np.sum,
     "人数": np.size,
     "平均成绩": np.mean,
     "标准差": np.std}
)
print("根据自定义分组统计结果:")
print(result2)
2. 生成数据透视表
# 生成数据透视表
result = df.pivot_table(values=['成绩'],
                        index=['分组'],
                        columns=['性别'],
                        aggfunc=[np.mean])
print("数据透视表结果:")
print(result)

五、数据相关性分析

计算两列之间的相关性以及相关系数矩阵。

# 计算两列之间的相关性
correlation = df['人均GDP(元)'].corr(df['人均消费水平(元)'])
print(f"人均GDP(元)和人均消费水平(元)的相关性: {correlation}")

# 计算相关系数矩阵
z = df[['人均GDP(元)', '人均消费水平(元)']].corr()
print("相关系数矩阵:")
print(z)


网站公告

今日签到

点亮在社区的每一天
去签到