数据分析Pandas库学习笔记(3)

这篇博客介绍了Pandas库在数据处理中的常用方法,包括简单的统计计算如求和、平均值、中位数,以及分组运算。重点讲解了`groupby()`函数的用法,如按列分组并进行聚合操作、筛选和转换。此外,还详细阐述了字符串的矢量化操作和时间相关的功能,如时间戳、时间间隔和时间索引的创建与操作。最后提到了数据重采样、去重、合并以及一些系列和DataFrame对象的通用方法。
摘要由CSDN通过智能技术生成
7.分组运算
1.简单的统计计算
pd.sum()
pd.mean(axis=None,skipna=None,level=None) #平均值
pd.median() #中位数
pd.descirbe() #给出此对象的基本统计项目
2.分组运算
df.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True)
"""
by:指明当前数据对象进行分组的依据,即分组的键,字符串或者其他可迭代对象(字典映射,函数对象参数为索引)
ruturn <pandas.core.groupby.DataFrameGroupBy object>
分为键 和 相应组的数据
"""
df3=pd.DataFrame({'subject':['math','english','math','english'],
                  'score':[90,89,85,94]})
print(df3.groupby('subject').sum())

结果:

        score
subject       
english    183
math       175
df.groupby('teacher').aggregate(['mean','std'])
# 将若干用于统计运算的函数聚合在一起
# aggregate可以实现对不同的列进行不同的运算,利用字典形式建立映射关系
df.groupby('teacher').agg({'score':np.mean,'rank':np.median})
df.groupby('subject').filter(lambda x: x['rank'].mean()>5)
# 筛选函数,筛选出符合条件的返回a copy of dataframe
# filter里参数为函数对象
df.groupby('subject').transform(func)
# 改变原数据的值,返回一个新对象
# 传入func函数的参数为每个分组对象
df.groupby('subject').apply(func,*args,**kwargs)
# 覆盖前三种方法的较灵活
8.矢量化字符串

矢量化字符(ser.str.)的方法

与python字符串方法大数相同

ser.str.capitaliza()
ser.str.lower()
ser.str.len()
ser.str.split()
ser.str.match()
ser.str[] #字符串的索引
ser.str.get(index) #获得index值
ser.str.slice(start,end) #获得[start,end)

对于字符串列表操作字符串元素:

names=['newton','hertz','curie']
print([name.capitalize() for name in names])
# ['Newton', 'Hertz', 'Curie']
# 但针对元素中有None的列表不成立
pd.Series(names) #将列表矢量化
9.与时间有关的操作
1.时间的物理量和对象
# 时刻 timestamp
pd.Timestamp(time,tz=None)
# tz:时区
# 时间间隔 timedelta
now_beijing=pd.Timestamp.now()
print(now_beijing-start) # start也是一个时刻
#Timedelta类型对象 ——>时间间隔
# 周期 period
pd.Period.now(freq='W')
# freq有很多取值其中'W'代表周,'M'代表月,'D'代表日

timestamp的一些方法:

now3=pd.Timestamp.now()
print(now3.dayofyear)   #10 今年第10天
print(now3.hour)    #20 现在是今天的第20个小时
print(now3.dayofweek)   #6 这周第六天
pd.to_datatime()
# 若参数是表示时间/日期的对象,生成Timestamp对象
# 若参数是由时刻组成的序列,生成DatatimeIndex对象
2.时间索引

Timestamp对象可构造DatatimeIndex对象

Period对象可构造PeriodIndex索引对象

Timedelta可构造TimedeltaIndex索引对象

通用构造方法:
datas=[pd.Timestamp('...'),pd.Timestamp('...')]
s= pd.Series([...,...],index=datas)
对于有规律的索引日期,类似使用np.arrange()生成连续的数值,可使用:
pd.date_range()
pd.period_range()
pd.timedelta_range()
通用形式:
pd.date_range(start=None,end=None,periods=None,freq='D',tz=None,*args,**kwargs)
periods:指定有几个值
freq:以什么为周期
#重采样:对有时间索引的数据进行二次采样
ps.resample(rule, how=None,axis=0,fill_method=None, label=None, convention='start',kind=None, loffset=None, level=None)
"""
rule:采样频率,'M','D'
closed:[right,left]哪端闭合
fill_method:重采样的方法,'ffill','bfill'
"""
Pandas库的方法:

pd.unique(1d_array_like):去重

pd.cut(x,bins, right=True, labels=None, retbins=False)

x=pd.Series([20,25,30,35,40])
bins=[10,30,40]
print(pd.cut(x,bins))
"""
0    (10, 30]
1    (10, 30]
2    (10, 30]
3    (30, 40]
4    (30, 40]
dtype: category
Categories (2, interval[int64]): [(10, 30] < (30, 40]]
"""

pd.concat(objs,axis=0,*args,**kwargs) #轴向连接

pd.merge(…) #合并

DataFrame对象的方法:

df.pivot(index=None,columns=None,values=None)

df.groupby()

df.set_index(keys)

df.join(other, on=None, how=‘left’)

df.head(n):显示最前的n行数据,默认为5行

df.to_* # 将dataframe格式数据转换为其他格式

df.combine_first(df2) #组合数据

Series对象的方法:

ser.unstack()

将具有多级索引的Series对象转换为DataFrame对象

ser.str.capitalize() # 首字母大写

ser.index

ser.values

ser.name

ser.index.name

ser.unstack(level=-1, fill_value=None) #将具有多级索引的Series转换为Dataframe

Series和DataFrame对象通用方法:

com.keys() #显示数据的索引dataframe为列索引

com.items()

df3=pd.DataFrame({'subject':['math','english','math','english'],
                  'score':[90,89,85,94]},index=
                 ['first','second','first','second'])

gdp_index=[('shanghai',2015),('shanghai',2016),('beijing',2015),('beijing',2016),
           ('changchun',2015),('changchun',2016)]
ser=pd.Series([25300,27466,23000,24899,18100,19611],index=gdp_index)
# print(df3.keys())   #Index(['subject', 'score'], dtype='object')
# print(ser.keys())
"""
Index([ ('shanghai', 2015),  ('shanghai', 2016),   ('beijing', 2015),
         ('beijing', 2016), ('changchun', 2015), ('changchun', 2016)],
      dtype='object')
"""
print(list(ser.items()))    #<zip object at 0x00000244D8319800>
# [(('shanghai', 2015), 25300), (('shanghai', 2016), 27466), (('beijing', 2015), 23000),
# (('beijing', 2016), 24899), (('changchun', 2015), 18100), (('changchun', 2016), 19611)]
print(list(df3.items()))  # <generator object DataFrame.items at 0x00000244D8311510>
"""
[('subject', first        math
second    english
first        math
second    english
Name: subject, dtype: object), 
('score', first     90
second    89
first     85
second    94
Name: score, dtype: int64)]
"""

com.iloc[]

com.loc[]

com.isnull() #判断数据是否缺失

com.notnull() #判断数据是否存在

com.dropna(axis=0) #忽略缺失数据

com.fillna()

com.append() #仅限于axis=0的连接,且不改变原有对象

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值