数据分析Pandas库总结分享
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