第四章 Pandas玩转数据

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

一、Series和DataFrame的简单数学运算

 

 

 

 二、Series和DataFrame的排序

sort()函数默认是升序,在括号内加上ascending=False则是降序

 

 

# homework (假设存在该csv文件):  打开一个csv文件并根据一个名为imdb_score的列按升序排序呈现,且只呈现"movie_title","director_name","imdb_score"这三列

csv_input = '../homework/movie_metadata.csv' pd.read_csv(csv_input).head() pd.read_csv(csv_input).head()

[["movie_title","director_name","imdb_score"]].head()#某三列,只取前几行 # 一行完成题目要求 (答案如下, 结果图如上)

pd.read_csv(csv_input)[["movie_title","director_name","imdb_score"]].sort_values('imdb_score',ascending=False).to_csv("imdb.csv")

!dir # 可查看已创建 imdb.csv 文件

!more imdb.csv # 查看文件内容 可看到index因imdb_score列从大到小降序而改变 ​

三、重命名DataFrame的Index

 

 

 

 

 

 

四、DataFrame的merge操作(=连接)

merge()函数:

merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x','_y'), copy=True, indicator=False)
                             

 

 

 五、Concatenate和Combine函数(组合、填充)

concatenate函数

combine函数

 

 

 六、通过apply进行数据预处理

apply()函数 

 七、通过去重进行数据清洗更多资源

删除某数组的某一列:

del df['name']  #删除了df这个DateFrame的name列

去重:

方法一:

df['name'].unique() #去重

方法二:

df['name'].duplicated()  #判断不重复 F  和 重复 T

df['name'].drop_duplicates()   #去重

#正确运用:
df.drop_duplicates(['name'])  #根据name该列去重,默认保留的是第一个不重复值

df.drop_duplicates(['name'], keep='last')  #last保留最后一个重复值

八、时间序列的操作基础

多一行,导入包:

from datetime import datetime

 eg:

pd.date_range('2016-01-01',periods=100, freq='W') #W一周时间week,默认从星期天开始

# 另外,freq=H 以小时为间隔, freq=5H以五小时为间隔
#freq='W-MON' 从周一开始,隔一周

 九、时间序列数据的采样和画图

resample('M').mean()    是求每个月的平均值,M换成H则是求每小时的平均值

eg:

 eg:

#假设 阿里巴巴的股票 随机
stock_df['BABA'] = np.random.randint(80,160,size=len(t_range))

#假设腾讯的
stock_df['TENCENT'] = np.random.randint(30,50,size=len(t_range))

stock_df.plot()  #显示图

 十、数据分箱技术Binning

 eg:

score_cat = pd.cut(score_list, bins) #将score_list拆分成bins段 四个区间
pd.cut(df['score'],bins) #将score根据bins段区间划分
df['Categories'] = pd.cut(df['score'], bins)
df['Categories'] = pd.cut(df['score'], bins, labels=['Low','OK','Good','Great']) 
#在df上添加新的一列Categories
#labels给每个阶段命名
df

 

 十一、数据分组技术GroupBy

 eg:

#和数据库差不多:
#select * from table_1 group by column_1
#根据某个column分解划分
g = df.groupby(df['city'])
g.get_group('BJ')

 十二、4-12数据聚合技术Aggregation

eg:

#数据聚合
g.agg('max')

#创建一个函数
def foo(attr):
    return attr.max() - attr.min()

g.agg(foo)  

十三、透视表 

 eg:

df是:

 

#eg 同一个用户可以购物多个产品 
pd.pivot_table(df, index=['Name'], aggfunc='sum')  #对columns透视 
#聚合aggfunc默认是mean, 故改成sum总计


pd.pivot_table(df, index=[ 'Manager', 'Rep'], values=['Price','Quantity'],columns=['Product'], fill_value=0,ggfunc='sum')

十四、分组和透视表功能实战

1.获取延误时间最长top10

df.sort_values('arr_delay',ascending=False) [:10] #ascending=False是降序,[:10]取前十个

2.计算延误和没有延误所占比例

df['delayed'] = df['arr_delay'].apply(lambda x:x>0)  #添加delayed列,x>0则延误了,必然是T延误

3.每一个航空公司延误的情况

delay_group = df.groupby(['unique_carrier','delayed'])
delay_group.size()  #F没有延误,T延误了航班
df_delay = delay_group.size().unstack()   #把Series变成df

import matplotlib.pyplot as plt

df_delay.plot()
#plt.show() 
#False没有延误,True延误了航班 

df_delay.plot(kind='barh', stacked=True, figsize=[16,6], colormap='winter')
#plt.show() 写不写都可以呈现出图

 4.透视表功能

flights_by_carrier = df.pivot_table(index='flight_date',columns='unique_carrier',values='flight_num',aggfunc='count')
flights_by_carrier.head()

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值