欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

数据分析Pandas库总结分享

程序员文章站 2022-03-05 09:32:47
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:指明当前数据对象进行分组的依据,即分组的键,字符串或者其他可迭代对象(字典映射,函数对象参...

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的连接,且不改变原有对象

本文地址:https://blog.csdn.net/endlessfc/article/details/112608052