Pandas基础

pandas基础

pandas包导入

import pandas as pd

pandas提供两种常用的数据结构:SeriesDataFrame

Series

Series是一维数组型对象

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

obj2 = pd.Series([1,3,4], index=['d','b','c'])

可以通过values属性查看值。

可以通过index属性查看值。

obj2.values

obj2.index

还可以通过索引查值

obj2['d']

obj2[['a','c]]

可以对整个数组进行操作

np.exp(obj2)

obj2 * 2

可以通过传入字典生成数组

sdata = {'a':3400, 'b': 456, 'c': 324}

obj3 = pd.Series(sdata)

可以调整字典生成的顺序

states = ['b', 'a', 'c']

obj4 = pd.Series(sdata, index= states)

没有的值会出现NaN,可以通过isnull或者notnull判断是否为空

pd.isnull(obj4)

pd.notnull(obj4)

Series对象自身和索引都有name属性

obj4.name='abc'

obj4.index.name='state'


DataFrame

DataFrame表示矩阵的数据表

可以通过等长度列表或Numpy数组字典生成

data = {'state' : ['ww','ww','ww','nn','nn'],

'year' : [2000,2001,2002,2003,2004],

'pop' : [1.5, 1.6, 1.7, 1.8, 1.9]}

``frame = pd.DataFrame(data)`

DataFrame的head方法可以显示头5行

frame.head()

可以指定列的顺序,如果列不在,出现缺失值NaN。

也可以指定行标。

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

index=['one','two','three','four'])

可以通过列名检索一列

frame2['state']

frame2.year

可以通过loc属性选取特定的行

frame2.loc['three']

可以对某些列赋值

frame2.debt = 16.5

frame2.debt = np.arange(4.)

可以通过Series给DataFrame进行赋值

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

frame2.debt = val

删除列用del

del frame.eastern

DataFrame可以转置

frame3.T

DataFrame的索引和列也有name属性

frame3.index.name = 'year'

frame3.columns.name = 'state'

DataFrame的values属性可以以多维数组方式返回值

frame3.values


Series和DataFrame数据交互的基本功能

重建索引

reindex方法可以创建一个符合新索引的新对象,已有的值重新排序,没有的值NaN补全

obj = pd.Series([1,2,4],index = ['d','b','a','c'])

obj2 = obj.reindex(['a','b','c','d','e'])

DataFrame中reindex默认改变行

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

改变列用columns关键字

states = ['Texas', 'Utah', 'California']

frame.reindex(columns =states)

同时重建行和列索引

ww = ['a','b','c','d']

frame.reindex(ww).reindex(columns=states)

删除条目

drop方法可以删除条目

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

obj.drop('c')

obj.drop(['b','c'])

对于DataFrame

默认是删除行,可以通过参数axis等于0或者1选择参数,0是行,1是列

data.drop(['two','three'],axis=1)

可以通过inplace属性删除原对象

obj.drop('c',inplace=True)

索引选择与过滤

python切片是不包括尾部的,Series包括尾部

obj['b':'c'] = 5 //b到c都包括

可以通过loc和iloc进行数据选择

data = pd.DataFrame(np.arange(16).reshape((4,4)),
                   index = ['Ohio','Colorado','Utah','New York'],
                   columns = ['one','two', 'three', 'four'])
data.loc[['Colorado','Utah'],['two','three']]
data.iloc[2,[3,0,1]]

loc切片是左闭右闭

iloc切片是左闭右开

算数和数据对齐

两个Series或者DataFrame可以直接加减,不同的部分会产生NaN

可以通过方法解决NaN值的问题,其中带r的是反转(例如除数被除数互换)

方法 描述
add,radd 加法
sub,rsub 减法
div,rdiv 除法
floordiv,rfloordiv 整除
mul,rmul 乘法
pow,rpow 幂次方

用DataFrame减去Series,会每行都减去Series,这就是广播机制

如果想每列都减去Series,需要匹配轴

frame1.sub(series1,axis='index')

frame1.sub(series1,axis=0)

函数应用和映射

numpy的函数对pandas对象也有效

np.abs(frame1)

将函数应用到一行或一列上,DataFrame的apply方法,默认作用在行上

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

frame.apply(f)

通过axis可以作用在列上

frame.apply(f,axis='columns')

DataFrame可以使用applymap方法,逐个单元格应用

format = lambda x: x+10

frame.applymap(format)

Series有map方法,可以逐列应用

frame['e'].map(format)

排序

obj.sort_index() //默认为行,可以通过axis=1变成列

默认升序,可以降序

frame.sort_index(axis=1,ascending=False)

默认所有NaN值都在尾部

DataFrame可以通过指定列为排序列,通过sort_values的by参数

frame.sort_values(by=‘b')

排名

obj.rank() //取平均名词

可以降序

obj.rank(ascending=False)

相同排名可以取平均名词,也可以最大,最小,或者第一次遇到名词高

average,min,max,first

obj.rank(method='min')


统计性计算

求和可以用sum方法,默认列上求和

frame1.sum()

可以通过axis=1变成行上

frame1.sum(axis=1)

除非整行或整列都是NaN,否则Na值是被自动排除的,可以通过skinna不忽略Na值。

frame1.mean(skipna=False)

方法 描述
count 非NA个数
describe 汇总统计
min,max 最小最大
argmin,argmax 最小最大所在索引
sum
mean 均值
median 中位数
prod 所有值的积
var,std 方差,标准差
cumsum 累计值
cumprod 累计积
pct_change 计算百分比

相关性和协方差

corr方法计算两个Series中重叠的,非Na的,按索引对齐值的相关性。

frame1['msft'].corr(frame1['ibm'])

或写成fame1.msft.corr(frame1.ibm)

cov计算协方差

frame1['msft'].cov(frame1['ibm'])

唯一值,计数和成员属性

unique方法会给出Series中的唯一值

uniques = obj.unique()

唯一值没有排序,排序可以使用sort方法

uniques.sort()

计算个数可以用value_counts方法

obj.value_counts()

isin判断是否包含

obj.isin(['b','c']) //将数组值全变成True和False

posted @   小五的室友  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示