Pandas中DataFrame用法总结

DataFrame:类似于表的数据结构

本文对Pandas包中二维(多维)数据结构DataFrame的特点和用法进行了总结归纳。

可以参考:pandas用法速览

3.1 增加数据

3.1.1 创建数据框Object Creation

import pandas as pd

import numpy as np

#通过Numpy array来创建数据框

dates=pd.date_range(‘2018-09-01’,periods=7)

dF1=pd.DataFrame(np.random.rand(7,4),index=dates) #从标准正态分布中返回一个数组

#通过dict来创建数据框

dataDict={‘A’:1.,

‘B’:pd.Timestamp(‘20180901’),

‘C’:pd.Series(1,index=range(4),dtype=‘float’),

‘D’:np.array([3]*4,dtype=‘int’),

‘E’:pd.Categorical([‘test’,‘train’,‘test’,‘train’]),

‘F’:‘foo’

}

dF2=pd.DataFrame(dataDict)

dF2.info() #查看数据类型

3.1.2 整合数据

Concat/Merge/Append

Concat:将数据框拼接在一起(可按rows或columns)

Merge:类似于SQL中Join的用法

Append:将数据按rows拼接到数据框中

#Concat:将数据框拼接在一起(可按rows或columns)

dF=pd.DataFrame(np.random.randn(10,4))

#将数据框拆分后在拼接

pieces1=dF[:3]

pieces2=dF[3:7]

pieces3=dF[7:]

pd.concat([pieces1,pieces2,pieces3],axis=0) #拼接

#Merge(类似于SQL中Join的用法)

left=pd.DataFrame({‘key’:[‘foo’,‘foo’],‘value’:[1,2]})

right=pd.DataFrame({‘key’:[‘foo’,‘foo’],‘value’:[4,5]})

#根据key进行连接

pd.merge(left,right,on=‘key’)

Python中Merge()函数用法

#Append:将数据按rows拼接到数据框中

df=pd.DataFrame(np.random.randn(8,4),columns=[‘A’,‘B’,‘C’,‘D’]

,index=range(1,9))

s=df.iloc[0] #提取第一行数据

df.append(s,ignore_index=False) #ignore_index若为Ture则插入数据后索引将更新,否则保持原有索引值

3.1.3 导入/导出数据Getting Data In/Out

Csv/Excel

#Csv

#导出为Csv文件,名称及位置(默认和notebook文件同一目录下)

df.to_csv(‘foo.csv’)

#导入Csv文件

fileDf=df.read_csv(‘foo.csv’)

#Excel

#导出为xlsx文件

df.to_excel(‘foo.xlsx’,sheet_name=‘Sheet1’)

#导入制定表的sheet数据

fileDf=pd.read_excel(‘Python数据/朝阳医院2018年销售数据.xlsx’,‘Sheet1’)

3.2 查看数据

3.2.1 查看数据Viewing Data

查看数据三部曲:

head():查看数据前几项,看数据长什么样

info():查看数据类型,以及数据缺失情况

descibe():查看数据描述统计性信息,数据大概分布情况)

#导入数据

fileDf=pd.read_excel(‘Python数据/朝阳医院2018年销售数据.xlsx’,‘Sheet1’)

#fileDf.head(n) n代表显示前几行数据

fileDf.head()

fileDf.info()

fileDf.describe()

此外,可以分别用fileDf.shape和fileDf.dtypes来查看数据的维度和各字段数据的类型。(注意在调用的时候不带括号)

#数据转置

fileDf.T

#按指定属性值排序

fileDf.sort_values(‘销售数量’,ascending=False) #按照‘销售数量’降序排列数据

#查看某数据数值的分布

fileDf[‘商品名称’].value_counts()

Pandas中排序函数sort_values()用法

3.2.2 选取数据Selection

#直接切片获取数据(行根据位置,列根据列名)

fileDf[‘商品名称’] #根据属性名,获取列

fileDf[0:3] #切片获取位置(0:2)的数据,相当于fileDf.iloc[0:3]

#利用loc根据标签值Label获取数据:可以交叉取值

fileDf.loc[0:3,[‘商品名称’,‘销售数量’]] #获取索引值为(0:3)的中’商品名称’的数据

fileDf.loc[1] #获取索引值为2的所有数据

#利用iloc根据位置获取Position数据

fileDf.iloc[1] #获取第二行的所有数据

fileDf.iloc[1:3,[0,3]] #获取第二、三行,一、四列的数据

#利用布尔值判断取数

fileDf[fileDf[‘销售数量’]>30] #提取“销售数量”大于30的数据

#isin()方法,类似于SQL中的in方法

fileDf[fileDf[‘商品名称’].isin([‘感康’])] #提取“商品名称”为感康的所有数据

#提取“商品名称”为感康,且“销售数量”大于5的所有数据

fileDf[fileDf[‘商品名称’].isin([‘感康’])&(fileDf[‘销售数量’]>5)]

3.2.3 数据操作Operations

stats/Apply

Apply:(用于dataframe,对row或column进行操作)类似于map(python自带,用于series,元素级别的操作)

#stats

fileDf.mean() #求均值

fileDf[‘实收金额’].mean() #求某列均值

#apply

df.apply(lambda x:x.max()-x.min())

3.2.4 分组操作Grouping

类似于SQL中的group by 分组操作

#根据商品名称进行分组求和,得到每种商品的’销售数量’,‘应收金额’,‘实收金额’

fileDf.groupby(‘商品名称’).sum()[[‘销售数量’,‘应收金额’,‘实收金额’]]

#根据时间和商品名称进行分组求和,得到每天每种商品的’销售数量’,‘应收金额’,‘实收金额’

fileDf.groupby([‘购药时间’,‘商品名称’]).sum()[[‘销售数量’,‘应收金额’,‘实收金额’]]

3.3 修改数据

3.3.1 缺失值处理Missing Data

pandas中主要用np.nan来代表缺失值(NaN),缺失值一般不进行计算操作

#剔除有缺失值的行

fileDf.dropna(how=‘any’)

#填充缺失值

fileDf.fillna(value=5) #用特定值填充

#找出‘商品名称’中有空缺值的行

fileDf[fileDf[‘商品名称’].isnull()]

3.3.2 改变形状Reshaping

Pivot Tables:类似excel中的数据透视表,重新组合行和列

#利用字典创建数据框

df=pd.DataFrame({‘A’:[‘one’,‘one’,‘two’,‘three’]*3,

‘B’:[‘A’,‘B’,‘C’]*4,

‘C’:[‘foo’,‘foo’,‘foo’,‘bar’,‘bar’,‘bar’]*2,

‘D’:np.random.randn(12),

‘E’:np.random.randint(0,5,12)}

)

print(df)

#分析D数据在A/B/C属性不同时的值

pd.pivot_table(df,values=‘D’,index=[‘A’,‘B’],columns=[‘C’])

3.4 时间序列Time Series

#创建间隔为1s总数100个时间序列

rng=pd.date_range(‘20180901’,periods=100,freq=‘S’)

#以时间序列为索引值,创建Series

ts=pd.Series(np.random.randint(0,500,len(rng)),index=rng)

#以1min为间隔进行求和

ts.resample(‘1Min’).sum()

#创建间隔为1天总数5个时间序列

rng=pd.date_range(‘9/1/2018 00:00’,periods=5,freq=‘D’)

#以时间序列为索引值,创建Series

ts=pd.Series(np.random.randn(len(rng)),index=rng)

沈阳性病医院哪家好

沈阳性病医院

你可能感兴趣的:(Pandas中DataFrame用法总结)