Dataehale学习记录2

Pandas

数据的读取和写入

可以读取csv,txt,excel.相应的有一些参数的设置,header=None表示第一行不作为列名,index_col表示把某一列或几列作为索引,索引的内容将会在第三章进行详述,usecols表示读取列的集合,默认读取所有的列,parse_dates表示需要转化为时间的列,nrows表示读取的数据行数。在下面三个函数中均可以使用
df_csv = pd.read_csv()
df_txt = pd.read_table()
df_excel = pd.read_excel()
数据写入按如下格式即可,index一般设置为False
df_csv.to_csv(’…/data/my_csv_saved.csv’, index=False)

Pandas的数据结构

Pandas的数据结构有两种,一种是Series,另一种是非常有名的DataFrame

Series一般由四个部分组成,分别是序列的值data、索引index、存储类型dtype、序列的名字name。其中,索引也可以指定它的名字,默认为空。对于这些属性,可以通过 . 的方式来获取。
DataFrame在Series的基础上增加了列索引,一个数据框可以由二维的data与行列索引来构造。DataFrame的操作类似于Series

Pandas常用基本函数

1 最常见的是sum, mean, median, var, std, max, min,quantile, count, idxmax这三个函数,它们分别返回的是分位数、非缺失值个数、最大值对应的索引
还有一些比较基本的如下

// A code block
df = pd.read_csv('../data/learn_pandas.csv')
df = df[df.columns[:7]]#取出前7列
df.head()#查看前几行
df.tail()# 查看后几行
df.info()#返回表的信息概况
df.describe() #count 非缺失值个数  主要是对应的统计量

####唯一值
对序列使用unique和nunique可以分别得到其唯一值组成的列表和唯一值的个数
value_counts可以得到唯一值和其对应出现的频数
如果想要观察多个列组合的唯一值,可以使用drop_duplicates。其中的关键参数是keep,默认值first表示每个组合保留第一次出现的所在行,last表示保留最后一次出现的所在行,False表示把所有重复组合所在的行剔除

一般而言,替换操作是针对某一个列进行的。pandas中的替换函数可以归纳为三类:映射替换、逻辑替换、数值替换。其中映射替换为replace方法。
在replace中,可以通过字典构造,或者传入两个列表来进行替换。
另外,replace还有一种特殊的方向替换,指定method参数为ffill则为用前面一个最近的未被替换的值进行替换,bfill则使用后面最近的未被替换的值进行替换。

// A code block
df['Gender'].replace({'Female':0, 'Male':1}).head()
df['Gender'].replace(['Female', 'Male'], [0, 1]).head()
s = pd.Series(['a', 1, 'b', 2, 1, 1, 'a'])
s.replace([1, 2], method='ffill')#指定method参数为ffill则为用前面一个最近的未被替换的值进行替换
s.replace([1, 2], method='bfill')#bfill则使用后面最近的未被替换的值进行替换
// An highlighted block
0    a
1    1
2    b
3    2
4    1
5    1
6    a
dtype: object

0    a
1    a
2    b
3    b
4    b
5    b
6    a
dtype: object
0    a
1    b
2    b
3    a
4    a
5    a
6    a

逻辑替换包括了where和mask,这两个函数是完全对称的:where函数在传入条件为False的对应行进行替换,而mask在传入条件为True的对应行进行替换,当不指定替换值时,替换为缺失值。
数值替换包含了round, abs, clip方法,它们分别表示取整、取绝对值和截断

排序共有两种方式,其一为值排序,其二为索引排序,对应的函数是sort_values和sort_index,默认参数ascending=True为升序。

// A code block
df_demo.sort_values(['Weight','Height'],ascending=[True,False]).head()
// An highlighted block
Height	Weight
Grade	Name		
Sophomore	Peng Han	147.8	34.0
Senior	Gaomei Lv	147.3	34.0
Junior	Xiaoli Chu	145.4	34.0
Sophomore	Qiang Zhou	150.5	36.0
Freshman	Yanqiang Xu	152.4	38.0

索引排序的用法和值排序完全一致,只不过元素的值在索引中,此时需要指定索引层的名字或者层号,用参数level表示。另外,需要注意的是字符串的排列顺序由字母顺序决定。

apply方法常用于DataFrame的行迭代或者列迭代。得益于传入自定义函数的处理,apply的自由度很高,但这是以性能为代价的。一般而言,使用pandas的内置函数处理和apply来处理同一个任务,其速度会相差较多,因此只有在确实存在自定义需求的情境下才考虑使用apply。

pandas中有3类窗口,分别是滑动窗口rolling、扩张窗口expanding以及指数加权窗口ewm

就必须先要对一个序列使用.rolling得到滑窗对象,其最重要的参数为窗口大小window
shift, diff, pct_change是一组类滑窗函数,它们的公共参数为periods=n,默认为1,分别表示取向前第n个元素的值、与向前第n个元素做差、与向前第n个元素相比计算增长率。这里的n可以为负,表示反方向的类似操作。

扩张窗口

// A code block
s = pd.Series([1, 3, 6, 10])
s.expanding().mean()
// An highlighted block
0    1.000000
1    2.000000
2    3.333333
3    5.000000
dtype: float64

练习

指数加权窗口

// A code block
np.random.seed(0)
s = pd.Series(np.random.randint(-1,2,30).cumsum())
s.ewm(alpha=0.2).mean().head()
def ewm_func(x, alpha=0.2):
    win = (1-alpha)**np.arange(x.shape[0])[::-1]
    res = (win*x).sum()/win.sum()
    return res
s.expanding().apply(ewm_func).head()
// An highlighted block
0   -1.000000
1   -1.000000
2   -1.409836
3   -1.609756
4   -1.725845
dtype: float64

结语

这段时间好紧张,整理的内容比较粗糙。希望自己以后能够提高一下效率。希望越来越好!加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值