# 准备工作
# pandas了解
pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的,Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
# pandas安装包下载
pycharm--files--settings--Python interuptr--pandas,numpy
cmd--利用pip下载
# pandas基础命令学习
# 数据分析
数据分析的流程概括起来为:数据的读写-->数据的处理和计算-->数据的分析建模-->数据的可视化。本篇着重学习数据的读写和数据的处理与计算。
# 了解数据
import pandas as pd
import numpy as np
#导入包
path1 = "../input/pandas_exercise/exercise_data/chipotle.tsv"
# 导入数据集(?)
chipo = pd.read_csv(path1, sep = '\t')
# 将数据集存入名为chipo的数据框
chipo.head(10)
# df.head(n)查看数据前n行 df.tail(n)查看数据框的最后n行
chipo.shape[1]
#df.shape()查看数据框的行数与列数
chipo.columns
#df.columns打印出数据集的列
c = chipo[['item_name','quantity']].groupby(['item_name'],as_index=False).agg({'quantity':sum})
c.sort_values(['quantity'],ascending=False,inplace=True)
c.head()
#新建数据框c含有数据框chipo的item_name和quantity项,以quantity的总和为第一优先级排序
chipo['choice_description'].value_counts().head()
#在choice_description中,下单次数最多的商品是什么?
total_items_orders = chipo['quantity'].sum()
total_items_orders
#一共有多少商品被下单,调用了sum函数
dollarizer = lambda x: float(x[1:-1])
chipo['item_price'] = chipo['item_price'].apply(dollarizer)
#将item_price转化为浮点数
chipo['sub_total'] = round(chipo['item_price'] * chipo['quantity'],2)
chipo['sub_total'].sum()
#在该数据集对应的时期内,收入(revenue)是多少,先算出每个商品的总收入(数量*单价),在sum求和
chipo['order_id'].nunique()
#在该数据集对应的时期内,一共有多少订单?nunique()可直接统计dataframe中每列的不同值的个数,也可用于series,但不能用于list.返回的是不同值的个数.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 数据过滤与排序
import pandas as pd
path2 = "../input/pandas_exercise/exercise_data/Euro2012_stats.csv"
euro12 = pd.read_csv(path2)
euro12.Goals
#只选取数据框中的某一列
discipline = euro12[['Team', 'Yellow Cards', 'Red Cards']]
discipline.sort_values(['Red Cards', 'Yellow Cards'], ascending = False)
#对数据框discipline按照先Red Cards再Yellow Cards进行排序,sort_values()函数排序具有优先级
round(discipline['Yellow Cards'].mean())
#mean()函数的功能是求取平均值。round()不是简单的四舍五入,round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数(这点上类似四舍五入)。但是当出现.5的时候,两边的距离都一样,round()取靠近的偶数。当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的这样情况,如果要取舍的位数前的小数是奇数,则直接舍弃,如果偶数这向上取舍。
euro12[euro12.Goals > 6]
#找到进球数Goals超过6的球队数据
euro12[euro12.Team.str.startswith('G')]
#选取以字母G开头的球队数据,先将team列转化为字符串模式调用startwith()函数
euro12.iloc[: , :-3]
#选取除了最后3行的全部列,iloc索引切片操作,iloc[ : , : ]前面的冒号就是取行数,后面的冒号是取列数,遵循左闭右开原则
euro12.loc[euro12.Team.isin(['England', 'Italy', 'Russia']), ['Team','Shooting Accuracy']]
#找到英格兰(England)、意大利(Italy)和俄罗斯(Russia)的射正率(Shooting Accuracy),loc——通过行标签索引行数据 ,iloc——通过行号索引行数据 ,ix——通过行标签或者行号索引行数据(基于loc和iloc 的混合)。标签切片,如’a’:‘c’,与序列切片如0:2不同,后者不包含index=2的元素,前者包含结束标签’c’所在的行。布尔类型数组作为标签,例如[True, False]等价于[‘a’,‘c’]。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 创建数据框-探索pokemom数据
import pandas as pd
raw_data = {"name": ['Bulbasaur', 'Charmander','Squirtle','Caterpie'],
"evolution": ['Ivysaur','Charmeleon','Wartortle','Metapod'],
"type": ['grass', 'fire', 'water', 'bug'],
"hp": [45, 39, 44, 45],
"pokedex": ['yes', 'no','yes','no']
}
#创建一个数据字典,name,evolution,type,hp,pokedex分别表示列名
pokemon = pokemon[['name', 'type', 'hp', 'evolution','pokedex']]
#修改数据框的排序
pokemon['place'] = ['park','street','lake','forest']
#添加一个列place
pokemon.dtypes
#查看每个列的数据类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 总结
通过本案例的学习,首先最基本的是掌握到了一些函数的用法,在学习过程中查找资料。 最重要的是通过这几个简单的案例,大致了解了数据分析的一般步骤,对于数据都可以做哪些处理。