Pandas 介绍
Pandas是python的一个数据分析包, 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
1、Pandas 基本用法
#导入pandas 库
In [1]: import pandas as pd
#csv文件是一个数据集的列表文件,根据文件格式指定编码
In [17]: df = pd.read_csv(r'E:/Test/student.csv',encoding='gbk')
#head 前几行,tail 最后几行
In [19]: df.head(5)
Out[19]:
姓名 性别 语文 数学 英语
0 小A 男 98 76 59
1 小B 男 88 26 64
2 小C 男 56 91 71
3 小D 男 74 83 80
4 小E 女 89 79 87
In [20]: df.index
Out[20]: RangeIndex(start=0, stop=9, step=1)
In [21]: df.columns
Out[21]: Index(['姓名', '性别', '语文', '数学', '英语'], dtype='object')
In [22]: type(df)
Out[22]: pandas.core.frame.DataFrame
#根据索引获取学生成绩
In [23]: df.loc[1]
Out[23]:
姓名 小B
性别 男
语文 88
数学 26
英语 64
Name: 1, dtype: object
#筛选出数学成绩大于80的学生
In [25]: df[df.数学>80]
Out[25]:
姓名 性别 语文 数学 英语
2 小C 男 56 91 71
3 小D 男 74 83 80
5 小F 女 63 91 53
#筛选出语数外都大于70分的学生
In [27]: df[(df.语文>70) & (df.数学 >70) & (df.英语>70)]
Out[27]:
姓名 性别 语文 数学 英语
3 小D 男 74 83 80
4 小E 女 89 79 87
#先根据数学成绩再根据语文成绩降序排序
In [33]: df.sort_values(['数学','语文'],ascending=False).head()
Out[33]:
姓名 性别 语文 数学 英语
5 小F 女 63 91 53
2 小C 男 56 91 71
3 小D 男 74 83 80
4 小E 女 89 79 87
0 小A 男 98 76 59
In [35]: scores = {'数学'[90,78,89],
...: '英语':[66,75,98],
...: '姓名':['A','B','C']}
#通过索引创建一个DataFrame,index指定索引
In [40]: df = pd.DataFrame(scores,index=['one','two','three'])
In [41]: df
Out[41]:
姓名 数学 英语
one A 90 66
two B 78 75
three C 89 98
#因为此时不是数字索引,不能通过数字索引去访问
In [42]: df.loc['two']
Out[42]:
姓名 B
数学 78
英语 75
Name: two, dtype: object
#实实在在的第几行
In [44]: df.iloc[1]
Out[44]:
姓名 B
数学 78
英语 75
Name: two, dtype: object
#ix 合并了loc和iloc的功能, df.ix['one']等价于df.ix[0],但已被弃用
#切片
In [51]: df[1:3]
Out[51]:
姓名 数学 英语
two B 78 75
three C 89 98
#提取指定列
In [49]: df[['数学','英语']]
Out[49]:
数学 英语
one 90 66
two 78 75
three 89 98
In [53]: def func(score):
...: if score >=90:
...: return '优秀'
...: elif score >=80:
...: return '良'
...: elif score >=60:
...: return '及格'
...: else:
...: return '不及格'
...:
#数据分类处理,插入一列 applymap 对所有的数据进行操作,map是单个
In [54]: df['数学分类'] = df.数学.map(func)
In [55]: df
Out[55]:
姓名 数学 英语 数学分类
one A 90 66 优秀
two B 78 75 及格
three C 89 98 良
In [56]: df.applymap(lambda x :str(x)+' -')
Out[56]:
姓名 数学 英语 数学分类
one A - 90 - 66 - 优秀 -
two B - 78 - 75 - 及格 -
three C - 89 - 98 - 良 -
#根据多列生成一个新列
In [58]: df['total'] = df.apply(lambda x:x.数学+x.英语,axis =1 )
In [59]: df
Out[59]:
姓名 数学 英语 数学分类 total
one A 90 66 优秀 156
two B 78 75 及格 153
three C 89 98 良 187
2、Pandas缺失值处理
In [66]: df = pd.DataFrame(np.random.random((3,3)))
In [67]: df
Out[67]:
0 1 2
0 0.379367 0.242707 0.090343
1 0.435034 0.968100 0.070522
2 0.409717 0.502982 0.890654
#设置Dataframe 中某个值
In [80]: df.iloc[1,1] = np.nan
In [82]: df.iloc[2,2] = np.nan
In [83]: df
Out[83]:
0 1 2
0 0.379367 0.242707 0.090343
1 0.435034 NaN 0.070522
2 0.409717 0.502982 NaN
#将所有含有nan项的row删除
#df.dropna(how='any')
#将全部项都是nan的row删除
#df.dropna(how='ALL')
#对缺失值进行填充
In [84]: df.fillna(value=0.5)
Out[84]:
0 1 2
0 0.379367 0.242707 0.090343
1 0.435034 0.500000 0.070522
2 0.409717 0.502982 0.500000
#df.describe()函数对于数据的快速统计汇总
In [94]: df.describe()
Out[94]:
0 1 2
count 3.000000 3.000000 3.000000
mean 0.408039 0.415230 0.220288
std 0.027871 0.149417 0.242440
min 0.379367 0.242707 0.070522
25% 0.394542 0.371353 0.080432
50% 0.409717 0.500000 0.090343
75% 0.422375 0.501491 0.295172
max 0.435034 0.502982 0.500000