数据分析库Pandas
Pandas介绍
导入pandas库
import pandas as pd
读取CSV文件
df = pd.read_csv('file_name') #注意文件路径
读取前几条数据
df.head(num) #num默认值是5,可以自己指定
返回当前文件的信息
df.info()
df.index
df.columns
df.dtypes
df.values
注意:Pandas的处理对象是DataFrame结构
创建一个dataframe结构
data = {‘name’:['wemo', 'azhu', 'john'],'age':[23, 18, 30]}
df_data = pd.DataFrame(data)
取指定的数据
age = df['Age']
age[:5] #取出前五个年龄的值
指定索引读取数据
df = df.set_index('Name')
df.head()
得到数据的基本统计特性
df.describle()
pandas索引
df[['Age','Fare']][:5]
iloc和loc的不同了:loc是根据dataframe的具体标签选取列,而iloc是根据标签所在的位置,从0开始计数
df.iloc[0:5, 1:3]
df.set_index('Name').loc['wemo, azhu', 'Fare']
bool类型的索引
df['Fare'] > 40 #返回的是True or False
df[ df['Fare'] > 40] #通过bool类型索引返回票价大于40的数据
(df.['Age'] > 70).sum() #统计年龄大于70的人数
groupby操作
import pandas as pd
df = pd.DataFrame({'key':['A', 'B', 'C', 'A', 'B', 'C'], 'data':[0, 5, 10, 5, 10, 15, 10, 15, 20]})
#进行分类统计操作
for key in ['A', 'B', 'C']:
print(df[df['key']==key].sum())
#下面通过groupby来实现上面代码的功能
df.groupby('key').sum(()
groupby的应用
df.groupby('Sex')['Age'].mean() #统计男女性别的年龄平均数
数值运算
进行数值计算的操作
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6]],index = ['a','b'],columns = ['A','B','C'])
df.sum() #默认按照第0维度计算
df.sum(axis = 1)
df.sum(axis = 'columns')
df.mean(axis = 1)
df.min()
df.max()
df.median() #进行中位数计算
df.cov() #协方差
df.corr() #相关系数
df['Age'].value_counts() #统计某特征的值的分布
df['Age'].value_counts(ascending = True,bins = 5) #升序排列,bins表示平均分成五个区间
对象操作
Series结构的增删改查
Series 是一维带标签的数组,它可以包含任何数据类型。包括整数,字符串,浮点数,Python 对象等。Series 可以通过标签来定位。
定义一个Series结构
data = [10,11,12]
index = ['a','b','c']
s = pd.Series(data = data,index = index)
Series结构的查操作
s[0] #通过位置来查询,类似于numpy
mask = [True,False,True]
s[mask] #通过布尔类型查询
s.loc['b'] #通过标签查询,区别于numpy的地方
s.iloc[1] #通过位置查询
Series结构的改操作
s1['a'] = 100 #通过对标签赋值
s1.replace(to_replace = 100,value = 101,inplace = True) #inplace为True表示改变s1的值,默认为false不改变原series的值(需要进行赋值操作)
s1.index = ['a','b','d'] #改变标签
s1.rename(index = {'a':'A'},inplace = True) #改变一个标签的值
Series结构的增操作
data = [100,110]
index = ['h','k']
s2 = pd.Series(data = data,index = index)
s3 = s1.append(s2) #直接append一组数据进来
#
s3['j'] = 500 #类似于字典添加键值对的操作
#
s1.append(s2,ignore_index = True) #ignore_index表示是否重新创建索引(0-n),默认ignore_index = False
Series结构的删操作
del s1['A'] #类似字典操作
s1.drop(['b','d'],inplace = True)
DataFrame结构的增删改查
DataFrame 是二维的带标签的数据结构。我们可以通过标签来定位数据。
定义一个DataFrame结构
data = [[1,2,3],[4,5,6]]
index = ['a','b']
columns = ['A','B','C']
df = pd.DataFrame(data=data,index=index,columns = columns)
查操作
df['A']
df.iloc[0]
df.loc['a']
改操作
df.loc['a']['A'] = 150
增操作
df.loc['c'] = [1,2,3]
df3 = pd.concat([df,df2],axis = 0)
删操作
df5.drop(['j'],axis=0,inplace = True)
merge函数的操作
res = pd.merge(left, right, on = ['key1', 'key2'], on='key',how = 'outer', indicator = True)
left:为DataFrame结构的对象,表示合并后位于左边
right:为DataFrame结构的对象,表示合并后位于左边
on:表示以什么为基准合并
how:默认以交集的方式合并,outer指明以并集方式合并。还有可以以right/left为基准合并
indicator:在合并后DataFrame结构中显示数据的来源
result = left.join(right, on='key') #还有一个合并操作join,需要时细查文档
数据显示设置
pd.set_option('display.max_rows',6)
pd.set_option('display.precision',5)
数据透视表
数据透视表:可以动态地改变它们的版面布置,以便按照不同方式分析数据,也可以重新安排行号、列标和页字段。每一次改变版面布置时,数据透视表会立即按照新的布置重新计算数据
df.pivot_table(index = 'Sex',columns='Pclass',values='Fare',aggfunc='max')
Pclass 1 2 3
Sex
female 512.3292 65.0 69.55
male 512.3292 73.5 69.55
aggfunc默认是求平均值,也可以是计数count、求最大值max
时间序列的操作
import datetime
dt = datetime.datetime(year=2018,month=4,day=23,hour=10,minute=30)
print (dt) #普通的时间操作
output:2018-04-23 10:30:00
#Pandas对时间序列的操作
import pandas as pd
ts = pd.Timestamp('2017-11-24') #通过Timestamp是一种方式
pd.to_datatime('2017-11-24')