pandas DataFrame对象
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
DataFrame结构:
列索引 列索引 列索引 列索引
行索引 value value value value
行索引 value value value value
行索引 value value value value
行索引 value value value value
行索引 value value value value
列和列的数据类型可以是不同的
# 一、构造DataFrame(两种方式)
# 方式一:使用DataFrame构造函数构造
DataFrame(np.random.randint(0,100,size=(3,5)))
DataFrame(np.random.randint(0,100,size=(3,5)), index=list("abc"), columns=list("ABCDE"))
# 方式二:使用字典构造
dict1 = {
"A": np.random.randint(0,100,size=3),
"B": np.random.randint(0,100,size=3),
"C": np.random.randint(0,100,size=3),
"D": np.random.randint(0,100,size=3),
"E": np.random.randint(0,100,size=3),
}
DataFrame(dict1, index=list("abc"))
# 从文件中读取DataFrame对象
# pd.read_csv()
# pd.read_table()
# pd.read_excel()
# header=0 以第一行作为列标签
# index_col=0 以第零列作为行索引
# sheet_name=0 指定读取的是第一张表,也可以sheet_name="Sheet1",指定名称
df = pd.read_excel("D:\Desktop\计221员工表.xlsx", header=0, index_col=0, sheet_name="Sheet1")
# 保存
df.to_excel("计221.xlsx")
# 使用Series构造DataFrame
s1 = Series(np.random.randint(0,100,size=5),index=list("abcde"),name="python")
df2 = DataFrame(s1)
df2.shape
# 二、运算
df3 = DataFrame(np.random.randint(0, 100, size=(3,5)), index=["lucy", "mery", "tom"], columns=list("ABCDE"))
df3
# 求每列平均值
df3.mean()
# 求行平均值
df3.mean(axis=1)
# 求和
# 默认求每列和
df3.sum()
# 求每行和
df3.sum(axis=1)
# 求中位数
# 默认求每列中位数
df3.median()
# DataFrame运算
# DataFrame和DataFrame(索引对齐相加)
df4 = DataFrame(np.random.randint(0,100,size=(3,4)), index=list("abc"), columns=list("ABCD"))
df5 = DataFrame(np.random.randint(0,100,size=(2,3)), index=list("ab"), columns=list("ABC"))
display(df4, df5, df4 + df5)
# DataFrame 和数组(numpy、Series)()
# DataFrame和numpy数组(广播)
np_array1 = np.ones(shape=(4))
np_array1 + df4
# DataFrame和Series(要注意索引)
s1 = Series(np_array1, index=list("ABCD"))
s1 + df4
# axis=0 行索引对齐
# axis=1 列索引对齐
# df4.add(s1, axis=0)
# DataFrame 和一个数
df4 + 1 # 全员加1(广播)
# 练习
# 假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
ddd = DataFrame(np.random.randint(0,150,size=(3,3)), index=["student_a","student_b","student_c"], columns=["语文","数学","英语"])
ddd2 = DataFrame(np.random.randint(0,150,size=(3,3)), index=["student_a","student_b","student_c"], columns=["语文","数学","英语"])
display(ddd, ddd2)
all = ddd + ddd2
all / 2
# 2.假设张三期中考试数学被发现作弊,要记为0分,如何实现?
ddd.iloc[2] = 0
ddd
# 3.李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
ddd.iloc[0] += 100
ddd
# 4.后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
ddd + 10
# 三、索引
# 访问DataFrame数据
df6 = DataFrame(np.random.randint(0,150,size=(3,5)), index=list("abc") , columns=list("ABCDE"))
df6
# 访问列
# 1.字典访问
df6["A"] # 推荐
# 2.属性访问
df6.A
# 3.列表访问
df6[["A", "B"]]
# 访问行
# 访问行必须用.loc
# .iloc是访问行的隐式索引
df6.loc["a"]
df6.loc[["a", "b"]]
df6.iloc[0]
df6.iloc[[0,1]]
# 访问元素
# numpy的访问逻辑一致(先行后列)
df6.loc["a","B"]
df6.iloc[0,1]
# 其他方式(间接访问,不推荐,可能会出问题)
# 间接访问适合读操作
# 直接访问适合读写操作
df6["B"]
df6["B"].iloc[0]
df6["B"]["a"]
df6["B"].values[0]
# 直接访问(推荐)
df6.loc["a","B"]
# 四、切片
# 标签处理的切片都是闭区间
df7 = DataFrame(np.random.randint(0,150,(2,3)), list("ab"), list("ABC"))
df7
# .loc切
# 标签切片切的是行
df7["a": "b"]
df7.loc["a":"b"] # 两者效果一样,都是切行
# 切列
df7.loc[:, "A": "B"]
# 隐式索引切
df7.iloc[0:1]
df7.iloc[0:1, 0:2]
# 用bool列表访问
bool_list1 = [True,False]
bool_list2 = [True,False,True]
df7.loc[bool_list1,bool_list2]
df7.loc[:,bool_list2]
# Series的bool_list是索引对齐,与顺序无关
s1 = Series(bool_list1,list("ba"))
df7.loc[s1]
# 读取A\C
df7.loc[:, "A":"C":2]
df7[["A","C"]]
# 其他
df7[["A","C"]].loc[["a","b"]]
df7.loc[["a","b"], ["A","B"]]
作者:cloud-2-jane
出处:https://www.cnblogs.com/cloud-2-jane/articles/18609823
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架