Pandas提供了一套名为DataFrame的数据结构,比较契合统计分析中的表结构,并且提供了计算接口,可用Numpy或其它方式进行计算。
1 文件读取
import pandas as pd
dataframe=pd.read_csv(r'C:\Users\Administrator\Desktop\mealcsv',encoding='gbk')
'''
读取
read_csv
read_excel
read_hdf
read_sql
read_json
read_msgpack(experimental)
ead_html
read_gbq(experimental)
read_stata
read_sas
read_clipboard
read_pickle
写入
dataframe.to_excel()
'''
2 dataframe属性
Dataframe是pandas常用对象,利用pandas读取数据后,数据以dataframe类型存储在内存中;
print('所有元素:\n',dataframe.values)
print('行索引:\n',dataframe.index)
print('列索引:\n',dataframe.columns)
print('元素类型:\n', dataframe.dtypes)
print('元素个数:\n', dataframe.size)
print('维度:\n', dataframe.ndim)
print('结构:\n', dataframe.shape)
print('转置:\n', dataframe.T)
3 dataframe增删改查
#1.dataframe查找
print('获取某一列:\n', dataframe['ACCOUNT'])
print('获取多列前5行:\n', dataframe[:][:5])
#tail()/head(),()中可以传数字,传入的数字表示获取对应的前几行,后几行;
print('获取后5行:\n', dataframe.tail())
#loc/iloc函数,建议使用lic/ilic切片,函数传入的值顺序与numpy相同【行,列】
#loc:针对索引名称的切片;loc[行索引名称或条件, 列索引名称]
# iloc:针对索引的切片(传入的必须是行索引和列索引所在的位置);iloc[行索引位置, 列索引位置]
print('使用loc切片,取ACCOUNT列:\n',dataframe.loc[:, 'ACCOUNT'])
print('使用iloc切片,取ACCOUNT列:\n',dataframe.iloc[:, 2])
#条件切片:
print(dataframe.loc[dataframe['order_id']==458, ['order_id','dishes_name']]) #查找订单号为458的订单所订的菜品名称
#2,更改数据:(直接对原表进行修改的)
dataframe.loc[dataframe['id]==400],'name']=='blac'
#3.添加数据:只需要新建一个列索引,并对该索引下的数据进行赋值:
dataframe['types']='int'
#4.删除某行某列:
#inplace:默认为False,表示是否对原表进行修改;axis=1,列操作 。 axis=0,行操作
dataframe.drop(labels=['types'],axis=1,inplace=True)
#how='all' 整列全是空值,删除整列。how='any',整列有任意一个空值,删除整列
dataframe.dropna(axis=1,how='all')
4 描述分析DataFrame数据
pandas中统计分析数值方法: describe方法求解:
# print(dataframe[['amounts']].describe())
#count:表示非空数目/mean:/std:标准差/四分位数(min,25%,50%,75%,max)
将数据数据类型转换后求统计描述:astype方法转化类型——-category;
dataframe['name'] = dataframe['name'].astype('category')
#describe:当其运用于类别型数据时,返回4个统计变量:分别为:
# 列非空元素的数目、类别的数目(去重后的值个数)、数目最多的类别、数目最多的类别出现的次数
print(dataframe['name'].describe())
转换与处理时间序列数据
#先转换为标准时间类型
dataframe['order_time'] = pd.to_datetime(dataframe['order_time'])
#或者:print(dataframe['order_time'].dt.date)
#提取时间序列信——需要利用列表推导式进行提取:
date = [i.date() for i in dataframe['order_time']]
print(date)
'''
year
month
day
hour
minute
second
'''
#时间运算:(加法运算)
#天数加1,Timedelta()内参数必须是复数
time1 = dataframe['order_time']+pd.Timedelta(days=1)
#时间运算:(减法运算)
timedelta = pd.to_datetime(dataframe['order_time'])- pd.to_datetime('2017-1-1')
print(timedelta)
聚合数据agg
detail=pd.read_excel(r'detail.xlsx')
#agg,求相同字段
print(detail[['counts','amounts']].agg([np.sum,np.mean]))
#求不同字段
print(detail.agg({'counts':np.sum,'amounts':np.mean}))
#不同字段,不同数目计算
print(detail.agg({'counts':np.sum,'amounts':[np.sum,np.mean]}))
#agg 自定义函数
# def doubles(data):
# return data.sum()*2
# print(detail.agg({'counts':doubles},axis=0))
聚合数据apply
#apply与agg差别在于apply不可以对不同字段使用不同函数
print(detail[['counts','amounts']].apply(np.mean))
聚合数据transform
print(detail[['counts','amounts']].transform(lambda x:x*2))