Pandas基础
pandas基础
pandas包导入
import pandas as pd
pandas提供两种常用的数据结构:Series和DataFrame。
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!