Pandas学习记录:第二章 pandas基础

一、文件的读取和写入

1. 文件读取

pandas 读取excel是比直接用python方便点。
要用xlrd和xlwt读写excel,还要下载安装xlrd和xlwt这两个库。
readbook = xlrd.open_workbook()

parse_dates 表示需要转化为时间的列:pd.read_csv(‘data/my_csv.csv’, parse_dates=[‘col5’])。觉得这个可能会很有用,可以规范格式,后期如果按时间进行排序,统计可能会方便不少。

2. 数据写入

我记得R语言写入默认不写索引的,python这个就不太方便,也可能是索引有更重要的意义。

二、基本数据结构

1. Series

pandas可以自定义索引,而不是默认为数字序号,感觉这个就类似于字典了

2. DataFrame

感觉比array强的地方是可以自定义索引

三、常用基本函数

1. 汇总函数

head, tail,info, describe对于快速预览表格很有帮助

2. 特征统计函数

需要注意的是:axis ,默认为0代表逐列聚合,如果设置为1则表示逐行聚合

3. 唯一值函数

value_counts 可以得到唯一值和其对应出现的频数,在统计的时候会很有帮助。
drop_duplicates可以去掉列组合的重复值,在sql里还要用group函数分组才行

4. 替换函数

replace 一种特殊的方向替换,指定 method 参数为 ffill 向前替换和 bfill向后替换就比较有意思。
where和mas是相对的两个函数,其实只用一个函数就可以实现所有功能
clip的用觉得可能是:先用clip截取固定范围的数据,再用别的函数把其他不在这个范围被调整为两个边界值的数据一次性去掉。

5. 排序函数

用sort_value的多级排序还是比较方便的的,比sql的group by好用

6. apply方法

麻烦,还是尽量用内置的函数

四、窗口对象

滑动窗口 rolling 、扩张窗口 expanding 以及指数加权窗口 ewm。
刚看到这部分很疑惑什么是窗口,后来发现其实窗口这个名字很形象。滑动窗口就像一个固定宽度的窗口左右滑动,来框选不同的值。

1. 滑窗对象

pct_change可以用来计算同比增长率

2. 扩张窗口

练习

Exe1

df = pd.read_csv('data/pokemon.csv')
(df[['HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed']].sum(1)!=df['Total']).mean()
 0.0

a.

dp_dup = df.drop_duplicates('#', keep='first')
dp_dup['Type 1'].nunique()
18
dp_dup['Type 1'].value_counts().index[:3]
Index(['Water', 'Normal', 'Grass'], dtype='object')

b.

attr_dup = dp_dup.drop_duplicates(['Type 1', 'Type 2'])
attr_dup.shape[0]
143

c.

[i+' '+j for i in df['Type 1'].unique() for j in (df['Type 1'].unique().tolist() + [''])]
 L_part = [i+' '+j for i, j in zip(df['Type 1'], df['Type 2'].replace(np.nan, ''))]
res = set(L_full).difference(set(L_part))

a.

df['Attack'].mask(df['Attack']>120, 'high').mask(df['Attack']<50, 'low').mask((50<=df['Attack'])&(df['Attack']<=120), 'mid').head()

0    low
1    mid
2    mid
3    mid
4    mid
Name: Attack, dtype: object

b.

df['Type 1'].replace({i:str.upper(i) for i in df['Type 1'].unique()}).head()

0    GRASS
1    GRASS
2    GRASS
3    GRASS
4     FIRE
Name: Type 1, dtype: object

df['Type 1'].apply(lambda x:str.upper(x)).head()

0    GRASS
1    GRASS
2    GRASS
3    GRASS
4     FIRE
Name: Type 1, dtype: object

c.

df['Deviation'] = df[['HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed']].apply(lambda x:np.max((x-x.median()).abs()), 1)
In [44]: df.sort_values('Deviation', ascending=False).head()

       #                 Name  Type 1  Type 2  Total   HP  Attack  Defense  Sp. Atk  Sp. Def  Speed  Deviation
230  213              Shuckle     Bug    Rock    505   20      10      230       10      230      5      215.0
121  113              Chansey  Normal     NaN    450  250       5        5       35      105     50      207.5
261  242              Blissey  Normal     NaN    540  255      10       10       75      135     55      190.0
333  306    AggronMega Aggron   Steel     NaN    630   70     140      230       60       80     50      155.0
224  208  SteelixMega Steelix   Steel  Ground    610   75     125      230       55       95     30      145.0

Ex2

np.random.seed(0)
s = pd.Series(np.random.randint(-1,2,30).cumsum())
s.ewm(alpha=0.2).mean().head()
 
0   -1.000000
1   -1.000000
2   -1.409836
3   -1.609756
4   -1.725845
dtype: float64

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()

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、付费专栏及课程。

余额充值