《利用Python进行数据分析》学习

一、Series

  • 利用列表创建Series
obj = Series([4,7,-5,3],index = ['d','b','a','c'])
  • 利用字典创建Series:键为索引
  • 利用values和index属性获取值和索引
obj.values
obj.index
  • 对Series进行Numpy数组运算,都会保留索引和值之间的链接

 

'b' in obj
#检测缺失数据
pd.isnull()
pd.notnull()
#Series的方法
obj.isnull()
obj.notnull()
  • Series在算术运算中会自动对齐不同索引的数据
  • Series对象本身及其索引都有一个name属性
obj.name = 'adj'
obj.index.name = 'state'
#Series的索引可以通过赋值的方式就地修改
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']

 

二、DataFrame

构建方法:

  • 直接传入一个由等长列表或NumPy数组组成的字典,每一列是一个键值对
frame2 = DataFrame(data,columns = ['year','state','pop','debt'],index = ['one', 'two','three','four','five'])
#data是一个字典
frame2.columns
  • 通过类似字典标记或属性的方式,可以将DataFrame的列获取为一个Series
frame2['state']
frame2.year
  • 列可以通过赋值的方式进行修改;也可以用Series对DataFrame进行赋值,索引会精确匹配,而所有空位将被填上缺失值
  • 关键字del用于删除列;属性
del frame2['eastern']
frame2.T  #转置
frame3.index.name
frame3.columns.name
frame3.values
  • 嵌套字典:外层字典的键作为列,内层键则作为行索引
  • 索引对象;index对象是不可修改的
obj.index
index = pd.Index(np.arange(3))
  • index的方法和属性:
  1. append
  2. diff:计算差集
  3. intersection
  4. union
  5. isin
  6. delete
  7. drop
  8. insert
  9. is_monotonic
  10. is_unique
  11. unique
  • 重新索引
s1.reindex(索引列表,fill_value = ..,method = 'ffill'/'bfill')  #Series重新索引
d1.reindex(index = ['a','b','c','d',method = 'ffill',columns = ...)  #重新索引行、列
frame.ix[['a','b','c','d'],list1]
  •  丢弃指定轴上的项
new_obj = obj.drop('d','c']  #返回一个新对象
  • 索引、选取和过滤

利用标签的切片运算和普通的Python切片运算不同,其末端是包含的

obj['b':'c']
data.ix[:,'b']

DataFrame的索引选项:

  1. obj[val]:选取dataframe的单个列或一组列
  2. obj.ix[val]:选取dataframe的单个行或一组行
  3. obj.ix[:,val]:选取单个列或列子集
  4. obj.ix[val1,val2]:同时选取行和列
  5. reindex方法:将一个或多个轴匹配到新索引
  6. xs方法:根据标签选取单行或单列,并返回一个Series
  7. icol、irow方法:根据证书位置选取单列或单行,并返回一个Series
  8. get_value、set_value方法:根据行标签和列标签选取单个值
  • 算术运算和数据对齐
  • 在算术方法中填充值
df1+df2
df1.add/sub/div/mul(df2,fill_value=0)
  • DataFrame和Series之间的运算

默认情况下,dataframe和series之间的算术运算会将series的索引匹配到dataframe的列,然后沿着行一直向下广播;如果你希望匹配行且在列上广播,则必须使用算术运算方法。eg:frame.sub(series,axis=0),传入的轴号就是希望匹配的轴。

  • 函数应用和映射

Numpy的ufuncs(元素级数组方法)也可用于操作pandas对象

 

np.abs(frame)

另一个常见的操作是,将函数应用到各列或行所形成的的一维数组上。DataFrame的apply方法即可实现此功能。

 

f = lambda x: x.max() - x.min()
frame.apply(x)
  • 排序和排名

对行或列索引进行排序,可用sort_index方法,返回一个新对象

若要按值对Series进行排序,可使用其order方法

若要按列值对Dataframe进行排序,将列名传递给by参数即可

DataFrame可以在行或列上计算排名  df.rank()

  • 带有重复值的轴索引
obj.index.is_unique
  • 汇总和计算描述统计
df.sum()
df.sum(axis=1)  #NA值会自动被排除,或用skipna=FALSE。axis代表约简的轴
df.idmax()  #返回的是间接统计(达到最大值的索引)
df.cumsum()  #累计型
df.describe()  #一次性产生多个汇总统计

描述统计相关方法:

  1. count
  2. describe
  3. min, max
  4. argmin, argmax:计算能够获取到最小值和最大值的索引位置(整数)
  5. idxmax, idxmin:计算能够获取到最小值和最大值的索引值
  6. quantile:计算样本的分位数
  7. sum
  8. mean
  9. median
  10. mad
  11. var
  12. std
  13. skew
  14. kurt
  15. cumsum
  16. cummin, cummax
  17. cumprod:累计积
  18. diff:一阶差分
  19. pct_change:计算百分数变化
  • 相关系数与协方差

Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数;与此类似,cov用于计算协方差:

 

df1.col1.corr(df1.col2)

DataFrame的corr和cov方法将以DataFrame的形式返回完整的相关系数或协方差矩阵

 

df1.corr()
df1.corrwith(df2.col1)
  • 唯一值、值计数以及成员资格
unique1 = s1.unique().sort()
  • s1.value_counts() #value_counts()用于计算一个Series中各值出现的频率
#value还是一个顶级的pandas方法,可用于任何数组和序列
pd.value_counts(obj.values, sort=False)
s1.isin(['b','c'])
result = data.apply(pd.value_counts).fillna(0)
  • 处理缺失数据

pandas使用浮点值NaN表示浮点和非浮点数组中的缺失数据

 

string_data.isnull()

NA处理方法:

dropna:根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度

fillna, isnull, notnull

  • 滤除缺失数据
s1.dropna()  #对于一个Series,dropna返回一个仅含非空数据和索引值的Series
df1.dropna(axis=...)  #对于一个DataFrame,dropna默认丢弃任何含有缺失值的行
  • 填充缺失数据
df.fillna(0)  #fillna默认返回新对象
df.fillna({1:0.5,3:-1)  #通过字典调用fillna,实现对不同的列填充不同的值
  • 层次化索引--在一个轴上拥有多个索引级别

层次化索引在数据重塑和基于分组的操作中很重要

 

df1.unstack()
df1.unstack().stack()
df1.index.names = 
df1.columns.names = 
MultiIndex.from_arrays([['Ohio','Ohio','Colorado'],['Green','Red','Green']],names = ['state','color'])  #可以单独创建MultiIndex然后复用
  • 重排分级顺序
df1.swaplevel('key1','key2')  #重新调整某条轴上各级别的顺序
df1.sortlevel(1)  #根据单个级别中的值对数据进行排序
  • 根据级别汇总统计
frame.sum(leve = 'color', axis = 1)  #level用于指定在某条轴上求和的级别
  • 使用DataFrame的列
frame2 = frame.set_index(['c','d'])  #将其一个或多个列转换为行索引,并创建一个新的 DataFrame
frame.reset_index()  #reset_index:层次化索引的级别会被转移到列里面

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值