Python知识分享第三十二天-Pandas入门二

发布于:2025-02-11 ⋅ 阅读:(60) ⋅ 点赞:(0)

Pandas

DataFrame属性

# DataFrame属性
# 1.准备动作 创建创建DataFrame对象 数据集-->是个学生的5门课程成绩(随机)
import numpy as np
import pandas as pd
import os

# 通过numpy随机生成十个学生的五门课程
score_data = np.random.randint(40,60,size=(10,5))
score_data
# 把生成的 ndarray--> DataFrame
score_df = pd.DataFrame(score_data)
score_df

# 定义变量 记录列名 和行索引
col_names = ['语文','数学','英语','物理','化学']
# 根据行数生成 行索引
idx_name = ['同学' + str(i) for i in range(score_df.shape[0])]

# 设置列名和行索引
score_df.columns = col_names
score_df.index = idx_name
score_df

演示df对象的常用属性

# 演示df对象的常用属性
# shape属性 获取df对象的形式  格式为: (行数,列数)
score_df.shape
# index属性 获取df对象的行索引
score_df.index
# columns属性 获取df对象的列名
score_df.columns
# values属性 获取df对象的数据 返回ndarray
score_df.values
# T属性 行列转置
score_df.T
# size属性 获取df对象的元素个数 即 行数* 列数
score_df.size
# dtypes 属性 按列获取df对象的数据类型
score_df.dtypes
# 2.演示 DataFrame的方法
# head()方法 默认 获取前五行数据|||   tail() 默认获取最后五行数据 
score_df.head()
score_df.head(10)
score_df.tail()
score_df.tail(10)

3.演示DataFrame的索引操作

# 3.演示DataFrame的索引操作
# 修改索引
# 需求: 把列名改为: 'Python基础', 'Python进阶', '数分阶段', '机器学习', '深度学习',  行索引: stu_0, stu_1...
# 错误示范
# score_df['同学0'] = 'stu0'   # 索引不能只改一个 只能改全部 这个动作是给表新增一列
# 删除新增的这一列
# score_df.drop('同学0',axis=1,inplace=True)
# 定义新列名 
new_col_name = ['Python基础', 'Python进阶', '数分阶段', '机器学习', '深度学习']
# 定义新行索引
new_idx_name = ['stu_'+ str(i) for i in range(score_df.shape[0])]
# 设置新的索引项
score_df.columns = new_col_name
score_df.index = new_idx_name
score_df

设置索引列

# 设置索引列
# 准备数据
df = pd.DataFrame({
    'month': [1, 4, 7, 10],
    'sale': [55, 40, 84, 31],
    'year': [2024, 2025, 2026, 2027]
})
df
# 设置month列为索引列
df.set_index('month',inplace=True)
# 取消设置索引列 drop 默认是Flase 表示不删除 索引项 把它变为数据列  写True会删除索引列
df.reset_index(drop=False)
df.reset_index(drop=True)
df.reset_index(inplace=True)
# 设置多列为索引列
df.set_index(['year','month'], inplace=True)

Pandas中的数据类型介绍

# Pandas中的数据类型介绍
# Pandas 中的类型有一些和python是类似的 例如 object(字符串) int bool nan(None) 也有特殊的 
# 如 datetime, timedelta, category
# 演示datetime 日期时间类型
data1 = pd.to_datetime(['2024-12-21', '2024-12-22', '2024-12-23'])
# 演示 timedelte
start_time = pd.to_datetime('2024-12-21')
end_time = pd.to_datetime('2024-12-23')
result = end_time - start_time
print(result)
print(type(result))  # <class 'pandas._libs.tslibs.timedeltas.Timedelta'>
# 演示category
# fruits = pd.Series(['apple', 'banana', 'cherry', 'apple', 'banana'])    # 每个值都会占用空间.
fruit = pd.Series(['apple', 'banana', 'cherry', 'apple', 'banana'],dtype='category')
print(fruit)    # Categories (3, object): ['apple', 'banana', 'cherry']

pandas 基本数据操作

# pandas 基本数据操作 
os.chdir(r'D:\code\ai_22_work\My_Numpy\day02')  # 修改路径为当前项目路径
os.getcwd()     # 查看当前工作路径
# 1.准备数据 从本地文件读取数据
df = pd.read_csv('./data/stock_day.csv')
# 2.删除不需要的列数据
df.drop(['ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20'],axis=1,inplace=True)
# 直接根据行列索引  注意 先列后行
df[open]['2018-02-27']
df

在这里插入图片描述

loc属性

# loc属性 先行后列 只能通过行索引+列名的方式来获取
df.loc['2018-02-23','high']
# 需求: 获取从2018-02-27 ~ 2018-02-22的 open列的数据.
df.loc['2018-02-27':'2018-02-22,'open']
# 需求: 获取从2018-02-27 ~ 2018-02-22的 open, high, close, low列的数据.       包左包右
df.loc['2018-02-27':'2018-02-22', 'open':'low']
df.loc['2018-02-27':'2018-02-22', ['open', 'high', 'close', 'low']]
# 需求: 获取从2018-02-27 ~ 2018-02-22的 所有列的数据.
df.loc['2018-02-27':'2018-02-22']
df.loc['2018-02-27':'2018-02-22', :]        # 这里的 : 代表 所有列
# 等价于 直接打印df对象 获取所有数据
df.loc[:,:]
df

iloc属性

# iloc属性 -> 先行后列 只能通过 行号+ 列索引的方式 获取
# 通过iloc属性 获取
df.iloc[0,0]
# 获取第一列前四行数据
df.iloc[:4,0]
# 需求: 获取从2018-02-27 ~ 2018-02-22的 open, high, close, low列的数据.       包左包右
df.iloc[:4,:4]
# 获取前四行 所有列的数据
df.iloc[:4]
df.iloc[:4,:]
# 观察结果 切片和列表切片一样 包左不包右
df.iloc[1:5:2, 2:5]

给列赋值 添加列 删除列

# 给列赋值 添加列 删除列 
# 删除列. 
df.drop(['ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20'], axis=1, inplace=True)  
# 获取所有行的, open, high列
df.loc[:,['open','high']]
# 修改列值
# 细节 列存在就是修改列值 不存在就是新增列
df['price_change'] =1
# 新增列
df['day_diff'] = df['high'] - df['low']
# 补充 df['列名] 和df.列名区别 如果是操作无特殊符号的列名 他们没区别 如果有特殊符号的比如空格 那   df['列名'] 是正确的
df.open
df['open']

DataFrame和Series的排序操作

# DataFrame 和 Series的排序操作
# 根据 单列值 进行排序, 例如: 根据 open(开盘价) 升序排列.
df.sort_values('open')
df.sort_values('open', ascending=True)
df.sort_values('open',ascending=False)

# 根据多列进行排序
df.sort_values(['open','high'],ascending=True)
df.sort_values(['open','high'],ascending=[True, False])
# 根据行索引排序
df.sort_index()   # 默认 升序
df.sort_index(ascending=False)  # 降序

# 以上根据值排序 默认都是按照0来排序
# df.sort_values('open', axis='rows')     # 根据open字段, 按照行排序, 默认: 升序.
df.sort_values('open', axis=0)          # 效果同上.
# df.sort_values('open', axis=1)            # 报错. 

# Series对象的排序 也有sort_index() 和sort_values() 两个函数 用法和Df对象一样
df.open.sort_index()
df.open.sort_index(ascending=False) # 降序
df.open.sort_values()
df.open.sort_values(ascending=False)

坚持分享 共同进步 如有错误 欢迎指出


网站公告

今日签到

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