• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
汜水
博客园    首页    新随笔    联系   管理    订阅  订阅

Pandas学习

1.Pandas简介

Pandas 是 Python 中用于数据分析的核心第三方库,提供易用的数据结构,擅长处理表格形式的结构化数据;支持从各类数据源导入数据,可以完成数据读取、清洗、统计分析与输出,广泛用于数据科学领域。

核心设计理念包括:
  1. 标签化数据结构:提供带标签的轴
  2. 灵活处理缺失数据:内置 NaN 处理机制
  3. 智能数据对齐:自动按标签对齐数据
  4. 强大 IO 工具:支持从 CSV、Excel、SQL 等 20 + 数据源读写
  5. 时间序列处理:原生支持日期时间处理和频率转换

image

2.Series

(一)Series的创建

 

# series的创建
import pandas as nd
s = pd.Series([1,2,3,4,5])
print(s) # 输出:

image

# 自定义索引
s = pd.Series([1,2,3,4,5],index=['A','B','C','D','E'])
print(s) # 输出:

image

# 定义name
s = pd.Series([1,2,3,4,5],index=['A','B','C','D','E'],name = '月份‘)
print(s) # 输出:

image

# 通过字典来创建
s = pd.Series({"a":1,"b":2,"c":3,"d":4,"e":5})
s1 = pd.Series(s,index=["a","c"])
print(s) # 输出:

image

(二)Series的属性

image

(三)访问Series数据

# 访问数据
print(s['c']) #输出:3
print(s[s<3]) #输出:a 1
                   #b 2
print(s.head()) # 默认返回前五行数据
print(s.tail(1)) # 返回最后一行数据

(四)Series的常用方法

image

image

# 查看所有的描述信息
s.describe()

# 获取元素个数(忽略缺失值)
print(s.count())

# 获取索引
print(s.keys()) # 方法
print(s.index) # 属性

print(s.isna()) # 检查Series里的每一个元素是否为缺失值
s.isin([4,5,6]) # 检查每个元素是否在参数集合中
print(s.mean()) # 平均值
print(s.std()) # 标准差
print(s.var()) # 方差
print(s.mode()) # 众数(打印出现频率最多的数)
print(s.value_counts()) # 打印每个元素出现的次数
s.drop_duplicates() # 去重
print(s.nunique()) # 去重后元素的个数

# 排序
s.sort_index() # 按索引排序
s.sort_values()# 按值排序

 3.案例

(一)学生成绩统计

# 创建一个包含10名学生数学成绩的Series,成绩范围在50-100之间。
# 计算平均分、最高分、最低分,并找出高于平均分的学生人数
import pandas as pd
import numpy as np
# 生成随机成绩
np.random.seed(42)
scores = pd.Series(np.random.randint(50,101,10),index = ['学生’+str(i) for i in range(1,11)])

print('平均分:',scores.mean())
print('最高分:',scores.max())
print('最低分:',scores.min())
                                                         
# 高于平均分的学生人数
mean = scores.mean()
counts = scores[scores>mean].count()
print(counts)
                           

 (二)温度数据分析

# 给定某城市一周每天的最高温度 Series,完成以下任务:
# 找出温度超过 30 度的天数
# 计算平均温度
# 将温度从高到低排序
# 找出温度变化最大的两天
import pandas as nd
temperatures = pd.Series ([28, 31, 29, 32, 30, 27, 33],
index=[' 周一 ', ' 周二 ', ' 周三 ', ' 周四 ', ' 周五 ', ' 周六 ', ' 周日 '])

# 找出温度超过 30 度的天数
rest1 = temperatures[temperatures>30].count
print("超过30度的天数:",rest1)

# 计算平均温度
rest2 = temperatures.mean()
print("平均温度:",rest2)

# 将温度从高到低排序
rest3 = temperatures.sort_values(ascending=False)
print("结果为:",rest3)

# 找出温度变化最大的两天
rest3 = temperatures.diff().abs() # 计算后一个元素与前一个元素的差值
n = rest3.sort_values(ascending=False).keys()
print("温度变化最大的两天:",n[:2].tolist())

 4.DataFrame介绍

 DataFrame 是 pandas 里面的二维表格数据结构(类似 Excel 表格):有行 (index)、列 (columns)

image

(一)DataFrame的创建

#dataframe的创建方式
import pandas as nd
import numpy as np

#通过series来创建
s1 = pd.Series([1,2,3,4,5])
s2 = pd.Series([6,7,8,9,10])
df = pd.DataFrame({"第一列":s1,"第二列":s2})
print(df) #输出:

 image

#通过字典来创建
df = pd.DataFrame(
    {
        "id":[1,2,3,4,5],
        "name":["tom","Jack","alice","bob","allen"],
        "age":[15,17,20,26,30],
        "score":[60.5,80,30.6,70,83.5]
    }
)
df #输出:

image

(二)DataFrame的属性

image

# dataframe的属性
print(df.index) # 行索引
print(df.columns) # 列标签
print(df.ndim) # 维度
print(df.shape) # 形状
print(df.size) # 元素个数
print(df.dtypes) # 数据类型
print(df.T) # 行列转置

# 获取name这一列数据
print(df.loc[:,'name']) 
print(df.iloc[:,0])

# 单个元素
print(df.at[3,'score']) #显式
print(df.iat[2,1]) # 隐式
...

 (三)访问DataFrame的数据

# 获取单列数据
print(df['name'])
print(df.name)

# 获取多列数据
print(df[['name','score']])

# 随机抽样
print(df.sample)

(四)DataFrame的常用方法

其中许多方法在前面学习series时都已经介绍过了,就不一 一赘述了。

image

(五)案例

学生成绩分析

# 案例 1:学生成绩分析
# 场景:某班级的学生成绩数据,完成下面 3 项任务
# 1.计算每位学生的总分和平均分。
# 2.找出数学成绩高于 90 分或英语成绩高于 85 分的学生。
# 3.按总分从高到低排序,并输出前 3 名学生。

import pandas as pd

data = {
    '姓名': ['张三', '李四', '王五', '赵六', '钱七'],
    '数学': [85, 92, 78, 88, 95],
    '英语': [90, 88, 85, 92, 80],
    '物理': [75, 80, 88, 85, 90]
}
scores = pd.DataFrame(data)
# 1.计算每位学生的总分和平均分。
scores['总分'] = scores[['数学','英语','物理']].sum(axis=1)
scores['平均分'] = scores['总分'] / 3
scores['平均分2'] = scores[['数学','英语','物理']].mean(axis=1)

# 2.找出数学成绩高于 90 分或英语成绩高于 85 分的学生。
scores[(scores['数学'] > 90) | (scores['英语'] > 85)]

# 3.按总分从高到低排序,并输出前 3 名学生。
r1 = scores.sort_values('总分',ascending=False).head(3)
r2 = scores.nlargest(3,columns=['总分']) # 返回某列数值最大的前 n 行

 5.数据分析步骤

image

6.数据的导入导出

import pandas as np

# 数据的导入
df = pd.read_csv('data/你的文件名')
print(type(df)) # 输出:<class 'pandas.core.frame.DataFrame'>

# 数据的导出
df = df.tail()
df.to_csv('data/新的文件名')

# json
df = pd.read_json('你的文件路径')

import json
with open('你的json文件名') as f:
    data = json.load(f)
df = pd.DataFrame(data['users']) # 从文件对象 f 读取 json 文件,转为 python 字典(dict)

 

posted on 2026-09-18 16:57  汜水  阅读(3)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3