Pandas(最基础)

Pandas是基于Numpy开发出的,专门用于数据分析的开源Python库

Pandas的两大核心数据结构

  • Series(一维数据)

Series

创建Series的方法

允许索引重复

  • DataFrame(多特征数据,既有行索引,又有列索引)

DataFrame

索引方法

 
  1. # 创建一个3行4列的DataFrame类型数据

  2. data_3_4 = pd.DataFrame(np.arange(10, 22).reshape(3, 4))

  3. # 打印数据

  4. print(data_3_4)

  5.  
  6. # 打印第一行数据

  7. print(data_3_4[:1])

  8. # 打印第一列数据

  9. print(data_3_4[:][0])

  • DataFrame的属性

原始数据

DataFrame的属性

 
  1. # 读取数据

  2. result = pd.read_csv("./students_score.csv")

  3. # 数据的形状

  4. result.shape

  5. # 每列数据的 类型信息

  6. result.dtypes

  7. # 数据的维数

  8. result.ndim

  9. # 数据的索引(起/始/步长)

  10. result.index

  11. # 打印每一列 属性的名称

  12. result.columns

  13. # 将数据放到数组中显示

  14. result.values

整体查询

 
  1. # 打印前5个

  2. print("-->前5个:")

  3. print(result.head(5))

  4. # 打印后5个

  5. print("-->后5个:")

  6. print(result.tail(5))

  7. # 打印描述信息(实验中好用)

  8. print("-->描述信息:")

  9. print(result.describe())

Panda数据读取(以csv为例)

 
  1. pandas.read_csv(filepath_or_buffer, sep=",", names=None, usecols = None)

  2.  
  3. filepath_or_buffer : 文件路径(本地路径或url路径)

  4. sep: 分隔符

  5. names: 列索引的名字

  6. usecols: 指定读取的列名

  7.  
  8. 返回的类型: DataFrame

读取并返回数据

  • Dataframe通过布尔索引过滤数据

布尔索引

 
  1. # 布尔索引(查询) 找出年龄大于23岁的人

  2. result[result["age"]>23]

小案例: 分析2006年至2016年1000部IMDB电影数据

2006年----2016年IMDB最受欢迎的1000部电影

评分降序排列

统计时长

 
  1. IMDB_1000 = pd.read_csv("./IMDB-Movie-Data.csv")

  2. # 获取数据字段

  3. print(IMDB_1000.dtypes)

  4. # 根据1000部电影评分进行降序排列,参数ascending, 默认为True(升序), 这里为False(降序)

  5. IMDB_1000.sort_values(by="Rating", ascending=False)

  6. # 时间最长的电影

  7. IMDB_1000[IMDB_1000["Runtime (Minutes)"]==IMDB_1000["Runtime (Minutes)"].max()]

  8. # 时间最短的电影

  9. IMDB_1000[IMDB_1000["Runtime (Minutes)"]==IMDB_1000["Runtime (Minutes)"].min()]

  10. # 电影时长平均值

  11. IMDB_1000["Runtime (Minutes)"].mean()

数据处理

  • 存在缺失值, 直接删除数据(删除存在缺失值的样本)

删除存在缺失值的样本

 
  1. # 删除存在缺失值的样本

  2. IMDB_1000.dropna()

不推荐的操作: 按列删除缺失值为IMDB_1000.dropna(axis=1)

  • 存在缺失值, 直接填充数据fillna

填充空缺值

使用平均值填充数据

 
  1. # 为一些电影缺失的总票房添加平均值

  2. IMDB_1000["Revenue (Millions)"].fillna(IMDB_1000["Revenue (Millions)"].mean(), inplace=True)

小案例: 乳腺癌数据预处理 (在线获取数据,并替换缺失符号为标准缺失符号np.nan)

替换默认的缺失符号

各列命名

读取原始数据

 
  1. # 在线读取数据,并按照说明文档, 并对各列信息进行命名

  2. bcw = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=["Sample code number","Clump Thickness","Uniformity of Cell Size","Uniformity of Cell Shape", "Marginal Adhesion","Single Epithelial Cell Size","Bare Nuclei","Bland Chromatin","Normal Nucleoli","Mitoses","Class:"])

预处理,把?替换为np.nan

小案例: 日期格式转换 数据来源

facebook

日期格式转换

 
  1. # 读取前10行数据

  2. train = pd.read_csv("./train.csv", nrows = 10)

  3. # 将数据中的time转换为最小分度值为秒(s)的计量单位

  4. train["time"] = pd.to_datetime(train["time"], unit="s")

  • 从日期中拆分出新的列

新增列

 
  1. # 新增列year, month, weekday

  2. train["year"] = pd.DatetimeIndex(train["time"]).year

  3. train["month"] = pd.DatetimeIndex(train["time"]).month

  4. train["weekday"] = pd.DatetimeIndex(train["time"]).weekday

数据表的合并(merge)

数据

 
  1. user_info.csv

  2. user_id,姓名,age

  3. 1,徐三,23

  4. 2,徐四,22

  5. 3,宝儿,210

  6. 4,楚岚,21

  7. 5,王也,24

  8. 6,诸葛青,21

  9. 7,天师,89

  10. 8,吕梁,24

  11. 9,夏禾,26

 
  1. goods_info.csv

  2. goods_id,goods_name

  3. G10,三只松鼠

  4. G12,MacBook

  5. G13,iPad

  6. G14,iPhone

 
  1. order_info.csv

  2. order_id,use_id,goods_name

  3. as789,1,三只松鼠

  4. sd567,2,MacBook

  5. hj456,4,iPad

合并过程

 
  1. # 读取3张表

  2. user_info = pd.read_csv("./user_info.csv")

  3. order_info = pd.read_csv("./order_info.csv")

  4. goods_info = pd.read_csv("./goods_info.csv")

  5. # 合并三张表

  6. u_o = pd.merge(user_info, order_info, how="left", on=["user_id", "user_id"])

  7. u_o_g = pd.merge(u_o, goods_info, how="left", on=["goods_name", "goods_name"])

  • 建立交叉表(用于计算分组的频率)

交叉表

 
  1. # 交叉表, 表示出用户姓名,和商品名之间的关系

  2. user_goods = pd.crosstab(u_o_g["姓名"],u_o_g["goods_name"])

Pandas的分组和聚合(重要)

小案例: 星巴克全球分布情况 数据来源

全球星巴克分布情况

 

读取全球星巴克的位置数据

每个国家星巴克的数量

每个国家每个省份星巴克的数量

 
  1. starbucks = pd.read_csv("./directory.csv")

  2. # 统计每个国家星巴克的数量

  3. starbucks.groupby(["Country"]).count()

  4. # 统计每个国家 每个省份 星巴克的数量

  5. starbucks.groupby(["Country", "State/Province"]).count()

  • 全球各国星巴克数量排名

全球星巴克数量排名



作者:木子昭
链接:https://www.jianshu.com/p/7414364992e4   https://blog.youkuaiyun.com/qq_40397452/article/details/81193091
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值