百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Python之pandas 基础篇(pythons pandas)

toyiye 2024-08-21 01:57 7 浏览 0 评论

Python之pandas 基础篇

以下语句是在pycharm中进行演示,复制到pycharm中运行可直接查看运行结果


#pandas 的数据结构介绍

#1.Series(由一组数据,各种Numpy数据类型)和一组索引组成:

import pandas as pd

import numpy as np

obj=pd.Series([4,7,-5,3])

print(obj)

#1.1Values和index属性:

print(obj.values)

print(obj.index)

#1.2给所创建的Series带有一个可以对各个数据点进行标记的索引:

obj2=pd.Series([4,7,-5,3],index=["d","b","a","c"])

print(obj2)

#与普通Numpy数组相比,可以通过索引的方式选取Series中的单个或一组数值

print(obj2["a"])

print(obj2[["c","a","d"]])

#可将Series看成时一个定长的有序字典,它是在索引值到数据值的一个映射(它可以用在许多原本需要字典参数的函数中),可通过字典直接创建

print('b'in obj2)

sdate={"ohio":3500,"Texas":7100,"Utah":500}

obj3=pd.Series(sdate)

print(obj3)

sdates=["calnia","ohie","orange"]

obj4=pd.Series(obj3,index=sdates)

print(obj4)

#如果只传入一个字典,则Series中的索引就是原字典中的键,Series最重要的一个功能是在算运算中自动对齐不同索引的数据

print(obj3)

print(obj4)

print(obj3+obj4)

#Series对象本身及其索引都有一name属性

obj4.name="population"

obj4.index.name="state"

print(obj4)

#Series的索引可以通过赋值的方式就地修改:

obj.index=["Bob","Steve","Jeff","Ryya"]

print(obj)

#2.DataFranme 是一个表格型的数据结构,既有行索引也有列索引.DataFrame中面向行和列的操作基本是平衡的。DataFrame的数据是以一个或多个二维快

#存放的,用层次化索引,将其表示为更高维度的数据,构建numpy,直接传入一个由等长列表或Numpy组成的字典

data={"state":["ohio","ohio","nevada","nebada"]}

data={"state":["ohio","ohio","ohio","nevada","nebada"],"year":[2000,2001,2002,2001,2002], "pop":[1.5,1.7,3.6,2.4,2.9]}

print(pd.DataFrame(dwata))

#2.1和Series一样,如果传入的列载数据中找不到,就会产生NA值

frame2=pd.DataFrame(data,columns=["year","state","pop","debt"],

index=["one","two","three","four","five"])

print(frame2)

print(frame2.columns)

#2.2可以通过赋值的方式进行修改

frame2["debt"]=[16.5,12,13,14,12]

print(frame2)

#2.3通过类似字典标记的方式或属性的方式,可以将DataFrame 的列获取为一个Series

print(frame2["state"])

print(frame2.state)

#2.4行也可以通过位置或名称的方式进行获取,比如用索引字段ix,将列表或者数组赋值给某一个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配Dataframe的索引,所有的空位都将被填上缺失值

val=pd.Series([-1.2,-1.5,-1.7],index=["two","four","five"])

frame2["debt"]=val

print(frame2)

print(frame2.columns)

#2.5对结果进行转置

print(frame2.T)

#2.6索引对象 pandas的索引对象,管理轴标签和其他元数据(如周名称,构建Series或Dataframe时,所用到的任何数组或其他序列的标签都会被转换成一个index,且index对象是不可修改的

obj=pd.Series(range(3),index=["a","b","c"])

index=obj.index

print(index)

print(index[1:])

print(obj)

#2.7index的功能类似一个固定大小的集合

print(frame2)

print("year" in frame2.columns)

print("one" in frame2.index)

#3基本功能 方法reindex:创建一个适应新索引的新对象

obj=pd.Series([4.5,7.2,-5.3,3.6],index=["d","b","a","c"])

print(obj)

obj2=obj.reindex(["q","b","c","d","e"])

print(obj2)

#调用该Series的reindex将会根据新索引进行重排。如果某个索引值当前不存在,将会引入缺失值

obj=obj.reindex(["q","b","c","d","e"],fill_value=0)

print(obj)

#对于时间序列这样的有序数据,重新索引时可能需要做一些差值处理

obj3=pd.Series(["blue","purple","yellow"],index=[0,2,4])

print(obj3.reindex(range(6),method="ffill"))

#对于Dataframe,reindex可以修改行,列索引,或两个都修改,如果仅传入一列,则会重新索引行:

frame=pd.DataFrame(np.arange(9).reshape(3,3),index=["a","c","d"],columns=["ohio","texa","california"])

print(frame)

frame2=frame.reindex(["a","b","c","d"])

print(frame2)

#使用columns关键字可重新索引列:

states=["texas","Utah","california"]

print(frame.reindex(columns=states))

#同时对行。列进行索引

print(frame.reindex(index=["1","2","3","4"],method="ffill",columns=states.sort()))

#丢弃指定轴上的项,drop方法返回的是一个指定轴上删除了指定值的新对象

obj=pd.Series(np.arange(5),index=["q","b","c","d","e"])

new_obj=obj.drop("c")

print(new_obj)

#对于DataFrame,可以删除任意轴上的索引值

data=pd.DataFrame(np.arange(16).reshape((4,4)),index=["ohio","corhioal","uthd","new_yor"],columns=["one","two","three","four"])

print(data)

print(data.drop(["ohio","corhioal"]))

print(data.drop(["one","two"],axis=1))

#3.2索引 选取和过滤 Series索引的工作方式类似于Numpy数组的索引,但Series的索引值不只是整数

obj=pd.Series(np.arange(4.),index=["a","b","c","d"])

print(obj)

print(obj["b"])

print(obj[1])

print(obj[[1,3]])

print(obj[obj<2])

#利用标签的切片运算,其包含闭区间(与普通p'y't'on的切片运算不同)

print(obj["b":"c"])

obj["b":"c"]=5

print(obj)

#对Dataframe进行索引就是获取一个列或多个列

data=pd.DataFrame(np.arange(16).reshape((4,4)),index=["ohio","corhioal","uthd","new_yor"],columns=["one","two","three","four"])

print(data["two"])

print(data[["one","two"]])

#这种索引方式的特殊情况:通过切片或者布尔型数组选取行

print(data[:2])

print(data[data["three"]>5])

#另一种用法就是通过布尔型Dataframe进行索引(在语法上更像ndarray)

print(data<5)

data[data<5]=0

print(data)

#3.2算术运算和数据对齐

#pandas最重要的一个功能是对不同索引的对象进行算术运算,对不同的索引对,取并集

a1=pd.Series([7.3,-2.5,3.4,1.5],index=["a","b","c","d"])

a2=pd.Series([7.3,-2.5,3.4,1.5],index=["a","b","c","g"])

print(a1+a2)

#自动的数据对齐操作在不重叠的索引出引入了NA值,即乙方有的索引,另一方没有,运算后该处索引的值为缺失值,对Dataframe,对齐操作会同事发生在行和列上

#3.3在算术方法中填充值 对运算后的NA值处填充一个特殊值(比如0)

df1=pd.DataFrame(np.arange(12).reshape((3,4)),columns=list("abcd"))

df2=pd.DataFrame(np.arange(20).reshape((4,5)),columns=list("abcde"))

print(df1.add(df2,fill_value=0))

#否则e列都是NAN值,类似在对Series和Dataframe重新索引时,也可以指定一个填充值

print(df1.reindex(columns=df2.columns,fill_value=0))

#用这几个特定字的,叫算数方法:add/sub/div/mul,即 加减除乘

#3.4 Dataframe和Series之间的运算 计算一个二维数组与其某行之间的差

arr=np.arange(12.).reshape((3,4))

print(arr-arr[0])

#这个叫广播,下面的每行都做这个运算,默认情况下,Dataframe和Series之间的算术运算也会将Series的索引匹配到Dataframe的列,然后沿着行一直向下广播

#函数的应用和映射 numpy的ufuncs 可用于操作pandas对象,以abs为例:

frame=pd.DataFrame(np.random.randn(4,3),columns=list("bde"),index=["ohio","corhioal","uthd","new_yor"])

print(np.abs(frame))

#Dataframe的apply方法:将函数应用到各列或行所形成的一列数组上

f=lambda x:x.max()-x.min()

frame.apply(f)

print(frame.apply(f))

print(frame.apply(f,axis=1))

#许多最常见到的数据统计功能都被封装为Dataframe的方法,无需使用apply,除标量值外,传递给apply的函数还可以返回由多个值组成的Series

def f(x):

return pd.Series([x.min(),x.max()],index=["min","max"])

print(frame.apply(f))

#用applymap得到frame中各个浮点值的格式化字符串

format=lambda x: "%.2f"%x

print(frame.applymap(format))

#Series有一个用于应用元素级函数的map方法

print(frame["e"].map(format))

#4排序和排名

#sort_index方法:返回一个已排序的新对象

obj=pd.Series(range(4),index=list("dabc"))

print(obj.sort_index())

#对于Dataframe,可以根据任意一个轴上的索引进行排序

frame=pd.DataFrame(np.arange(8).reshape((2,4)),index=["three","one"],columns=list("dabc"))

print(frame)

print(frame.sort_index())

print(frame.sort_index(axis=1,ascending=True))

#默认是按升序排列

#对Series 进行排序,可用方法sort_values(),在排序时任何缺失值默认都会被放到Series末尾

obj=pd.Series([4,7,-3,2])

print(obj.sort_values())

#DataFrame上,用by根据列的值进行排序:

frame=pd.DataFrame({"b":[4,7,-3,2],"a":[0,1,0,1]})

print(frame)

print(frame.sort_index(by="b"))

print(frame.sort_values(by="b"))

#根据多个列进行排序

print(frame.sort_values(by=["a","b"]))

#rank方法: 默认情况下,rank是通过"为各组分配一个平均排名"的方式破坏平级关系

obj=pd.Series([-7,5,4,5,0,4])

print(obj.rank())

#根据值在原数据中出现的顺序给出排名:

print(obj.rank(method="first",ascending=True))

#Dataframe可以在行或列上计算排名:

frame=pd.DataFrame({"b":[4.3,7,-3,2],"a":[0,1,0,1],"c":[-2,5,8,10]})

print(frame)

print(frame.rank(axis=1))

#带有重复值的轴索引 虽然许多pandas函数都要求标签唯一(如reindex),但这不是强制的,带有重复索引的index

obj=pd.Series(range(5),index=list("aabbc"))

print(obj)

print(obj.index.is_unique)

print(obj["a"])

#索引的is_unique属性可以判断它的值是否唯一,带有重复索引的Dataframe

df=pd.DataFrame(np.random.randn(4,3),index=list("aabb"))

print(df)

#在pandas 中,dataframe.ix[i}和dataframe.iloc[i]都可以选取dataframe中第i行数据,ix可以通过行号和行标签进行索引,而iloc只能通过行号索引,即ix可以看成是iloc以及loc的综合

#(loc 在index 的标签上进行索引,范围包含start和end,iloc在index的位置上进行索引,不包含end,ix在index的标签上索引,索引不到就在index的位置上索引若index非全整数,不包含end)

#汇总和计算描述统计

#pandas对象拥有一组常用的数学和统计方法,用于从series中提取单个值,或从Dataframe的行或列中提取一个Series,跟numpy数组方法相比,他们都是基于没有缺失数据的假设而构建的

df=pd.DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index=list("abcd"),columns=["one","two"])

print(df)

print(df.sum)

print(df.sum(axis=1))

#有关na的值会自动被排除,通过skipna选择可以禁用该功能(df.sum(axis=1,skipna=False)

#一次性产生多个统计结果

print(df.describe())

#4.1相关系数和协方差(Series和Dataframe corr方法:相关系数 cov方法:协方差)

#Dataframe的corrwith方法计算其列或行跟另一个Series或dataframe之间的相关系数,传入一个DATAframe计算按列名配对的相关系数,传入axis=1即可按行进行计算

#唯一值,值计算以及成员资格 从一维Series的值中抽取信息 unique函数:得到Series中的唯一值数组

obj=pd.Series(list("aaaabbbbcddshg"))

print(obj.unique())

#value_counts用于计算一个Series中各值出现的频率

print(obj.value_counts())

print(pd.value_counts(obj.values,sort=False))

#isin 用于判断矢量化集合的成员资格,可用于选取Series或Dataframe

mask=obj.isin(["b","c"])

print(mask)

print(obj[mask])

#处理缺失数据 opandas 的设计终极目标之一就是让缺失数据的处理任务尽量放松,pandas使用浮点值nan(not a number)表示浮点和非浮点数组中的缺失数据。它只是一个便于被检测出来的标牌机而已,pythonne内置的none值也会当作NA处理

#4.2过滤缺失数据 对于一个Series ,dropna返回一个仅含非空数据和索引值的series;

from numpy import nan as NA

data=pd.Series([1,NA,3.5,NA,7])

print(data.dropna())

#通过布尔索引也可以达到此目标

print(data[data.notnull()])

#对于dataframe对象,dropna默认丢死任何含有缺失值的行

data=pd.DataFrame([[1,6.3,3],[1,NA,2,NA],[NA,NA,NA,NA]])

print(data.dropna)

#填充缺失数据 fillna方法:通过一个常熟调用dillna就会将缺失值替换为那个常数

print(df.fillna(0))

#另外可以用fillna 实现许多别的功能,比如传入Series 的平均值或者中位数

data=pd.Series([1,NA,3.5,NA,7])

print(data.fillna(data.mean()))

#层次化索引 在一个轴上用多个(2个以上)索引级别,即以较低维度形式处理高维度数据,multilndex索引Series格式话输出形式:

data=pd.Series(np.random.randn(10),index=[list("aaabbbccdd"),[1,2,3,1,2,3,1,2,3,2]])

print(data)

#选取数据子集

print(data["b"])

print(data.loc[["b","d"]])

#在内层中进行选取

print(data[:,2])

#层次化索引在数据重塑和基于分组的操作中很重要,比如说上面的数据可以通过其unstack方法被重新安排到一个新的Dataframe,它的逆运算是stack

print(data.unstack())

print(data.unstack().stack)

#对于一个dataframe,每条轴都可以有分层索引

frame=pd.DataFrame(np.arange(12).reshape((4,3)),index=[list("aabb"),[1,2,1,2]],columns=[["tom","tom","jack"],["ab","ac","ad"]])

print(frame)

#各层都可以有名字,,注意不要将索引名称跟轴标签混合在一起

frame.index.names={"key1","key2"}

print(frame)

#有了分布的列索引可以轻松选取列分组

#重排分级顺序 重新调整某条轴上各级的顺序,或根据指定级别上的值对数据进行排序 swaplevel:接受两个级别编号或名称,返回一个互换了级别的新对象,数据不发生改变

print(frame.swaplevel("key1","key2"))

#sortlevel:根据单个级别中值对数据进行排序(得到最终结果是有序的)

#4.5根据级别会哦在那个统计 level 选项:用于指定在某条轴上的求和级别 如下面所示,分别根据行或列上的级别来对行,对列进行求和

print(frame.sum(level="key2"))

#4.6使用dataframe的列 将dataframe的一个或多个列当作行索引来用,或将行索引变成dataframe的列

frame=pd.DataFrame({"a":range(7),"b":range(7,0,-1),"c":["one","one","one","two","two","two","two"],"d":[0,1,2,0,1,2,3]})

print(frame)

frame2=frame.set_index(["c","d"])

print(frame2)

#set_index函数:将其一个或多个列转换成行索引,并创建一个新的Dataframe 默认情况下那些列会从dataframe中移除,也可以将其保留下来

print(frame.set_index(["c","d"],drop=False))

#reset_index:将层次化索引的级别转移到列里面((和set_index相反)

print(frame2.reset_index())


相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码