pandas(Python Data Analysis Library)是基于numpy的一种工具,它的出现是为了解决数据分析方面的问题。如果要使用python做数据分析,那么这个库必不可少。为了让初学者能够快速入门,下面就简单的操作操作pandas。
安装方法与其他python包的安装方法相同,使用 'pip'安装。
pip install pandas
导入pandas
import pandas as pd
读取文件
#将excel读取并转换为pandas的DateFrame
df_score = pd.read_excel('score.xlsx')
#pd.read_csv读取CSV文件
df_imdb = pd.read_csv("IMDB.csv")
简单操作
#创建一个默认索引从0开始的Series
s = pd.Series([1,2,3,4,5])
#创建一个自定义索引的数组,索引由index指定,和前面的数组依次对应
s = pd.Series([1,2,3,4,5,6],index=['a','b','c','d','e','f'])
#使用字典创建一个DataFrame,字典的Key会自动成为索引,一个Key默认对应一列数据
df1 = pd.DataFrame({'math':[1,2,3,4,5],'physic':[5,6,7,8,9]})
#提取头两行,参数指定从开始读取多少行
df1.head(2)
#提取尾部数据,参数指定从结尾开始多少行
df1.tail(2)
#生成从20180101开始的时间序列,默认增加单位是天
dates = pd.date_range('20180101',periods=10)
#创建使用时间索引的Series
s_date = pd.Series(range(10),index=dates)
#取出从2018-01-01到2018-01-06的行数据
# print(s_date['2018-01-01':'2018-01-06'])
操作文件('csv'与'xlsx'操作方法相同,此处由于两个文件内容的不同,所以将两个文件的操作隔开来展示)
'csv'
df_imdb = pd.read_csv("IMDB.csv")
#选出一列
# print(df_imdb.Title)#相当于df_imdb['Title']
#获取最高票房
df_imdb['Revenue (Millions)'].max()
#将DateFrame第50行数据的Director取出,[]取1-6的数据的时候,不会把6
print(df_imdb[50:51]['Director'])
#第一个维度的行,第二个维度是列,将50-56行(包含50行和56行自身)的导演和年份取出来
print(df_imdb.loc[50:56,['Director','Year']])
#将1-10(不包含第10行),及2-3列(不包含第3列)取出,使用整数索引操作
print(df_imdb.iloc[1:10,2:3])
#统计Director列中不同导演出现的次数
print(df_imdb['Director'].value_counts())
#将票房大于5亿美元的电影选出来 支持 < > ==
print(df_imdb[df_imdb['Revenue (Millions)'] > 500])
#将票房大于5亿美元的电影的导演选出来 支持 < > ==
print(df_imdb[df_imdb['Revenue (Millions)'] > 500]['Director'])
#将字符串Genre(风格)描述中含有Music关键字的找出来,str将待处理列转化为字符串
print(df_imdb[df_imdb['Genre'].str.contains("Music")])
#取出Embarked,Survived字段,按照两个字段的顺序(重要!!)做层次分组,然后计算总和
df_imdb.loc[:,['Embarked','Survived']].groupby(['Embarked','Survived']).size()
# 结果: Embarked Survived
# C 0 75
# 1 93
# Q 0 47
# 1 30
# S 0 427
# 1 217
df_imdb.loc[:,['Embarked','Survived']].groupby(['Survived','Embarked']).size()
# 结果:Survived Embarked
# 0 C 75
# Q 47
# S 427
# 1 C 93
# Q 30
# S 217
'xlsx'
df_score = pd.read_excel('score.xlsx')
#将缺失数据(NaN)填充为0,也可以自己根据项目需求指定其他数据
df_score.fillna(0)
#将缺失数据的行移出(默认操作,可以使用axis=1指定删除列)
df_score.dropna()
#在DateFrame中增加一列avg(平均值),计算当前DateFrame中每一行的平均值作为avg的数据,前后赋值数据的行数要对应
#axis=1表示按照行计算平均值,axis=0(默认值),表示按列计算
df_score['avg'] = df_score.mean(axis=1)
#选出音乐、性别字段,按照性别分组,进一步计算各个分组的总和
df_score.loc[:,'音乐','性别'].groupby('性别').sum()
#将数学成绩大于80和化学成绩大于60的同学选出
df_score[(df_score['数学']>80) & (df_score['化学']>60)]
#图
df_score['性别'].value_counts().plot(kind='bar')
#使用lambda,配合apply方法将日期中的年份提取出来
#apply函数会将lambda一次作用到数据集的每个元素
dates = pd.Series(['20190912','20121212','20131013'])
dates.apply(lambda x:x[0:4])
#创建一个数据的副本
df_copy = df_score.copy()
#计算数学列总和、平均值、最大值、方差,里面的字符串必须有同名函数
df_score['数学'].agg(['sum','mean','max','std'])
#将pandas类型转换为numpy类型
print(df_score.loc[:,['数学','化学']].values)
#为成绩表添加一个新列,计算总和
df_score['sum'] = df_score.sum(axis=1)
#对新添加的sum(总和)按照降序进行排序,False:降序,默认是升序
df_score['sum'].sort_values(ascending=False)