导入库:import pandas as pd
读取文件:df=pd.read_csv(”文件路径“)
导出文件:df.to_excel(excel_writer=r"路径")
查询部分数据:df.head() 默认前5行
查询尾部数据:df.tail()默认后5行
查询当前数据信息:df.info()
查询数据索引信息:df.index
查询数据列名:df.columns
查询数据值:df.values
获取某列数据:df[“列名”]
将某列作为索引:df=df.set_index(‘列名’)
将取出的数据进行运算
age=df[‘age’]
age=age+/-/* N
age.mean()
age.min()
统计数据的各项数据指标:df.describe()
索引
传入多列数据:df=df[[‘列名’,‘列名’]]
传入指定列:
loc
通过行标签定位传入数据:df=df.loc[0]
通过切片传入多行数据:df=df.loc[0:]
传入某行某列数据:df=df.loc[0,[‘列名’,‘列名’]]
只传入某列:df=df.loc[: , [‘c’]]
注释:当然获取某列数据最直接的方式是df.[列标签],但是当列标签未知时可以通过这种方式获取列数据。需要注意的是,dataframe的索引[1:3]是包含1,2,3的,与平时的不同。
iloc
通过行号获取行数据:df.iloc[1] 注:通过行标签索引会报错
同样通过行号可以索引多行:df.iloc[0:]
索引列数据:df.iloc[:,[1]]
ix
结合前两种的混合索引,既可以通过行号,又可以通过行标签获取数据。 但要被遗弃
将某列作为索引 : df=df.set_index(‘列名’)
将布尔类型作为索引:筛选数据:df[df[‘某列’] >/=/== 条件]
统计某条件下的数据特征
统计性别为男性的年龄的均值 : df.loc[df[‘sex’]==‘male’,‘age’].mean()
判断值是否在某个集合中 : s.isin([1,2,3])
返回与某个集合内匹配索引对应的值 : s[s.isin([1,3,4])]
多重索引 : s2=pd.Series(np.arange(6),index=pd.MultiIndex.from_product([0,1],[‘a’,‘b’,‘c’]]))
返回多重索引下的值 : S.iloc[s2.index.isin([1,‘a’),(0,‘b’)])]
where 操作
S[S>2]
df.where(df<0)
query 操作
df.query(’(A
分组统计 :
df.groupby()
实例 : df.groupby(‘sex’)[‘age’].mean()
df=pd.cut(x,bins,right,labels)
x传入要切分的一维数组或列表
bins切分方式或者是切分为几组
right:false为左闭右开,true为左开右闭
labels:为分组标签
删除空值 :
df.dropna
dropna函数默认删除所有出现空值的行,即只要一行中任意一个字段为空,就会被删除。我们可以设置subset参数,例如dropna(subset = [‘name’]),来指定当一行中的name字段为空时,才会被删除。
去重 :
drop_duplicates方法去重默认会删掉完全重复的行(每个值都一样的行),如果我们要删除指定列重复的数据,可以通过指定subset参数来实现。
基本运算
求和
按列求和 : df.sum() 默认按列求和 df.sum(axis=0)
按行求和 : df.sum(axis=1) df.sum(axis=‘columns’)
均值/中位数
mean/median : 其他操作与求和方法相同
二元统计
协方差 :df.cov()
相关系数:df.corr()
按不同值 计数 :df[‘age’].value_counts()
默认按数量降序排列 : df[‘age’].value_counts(ascending=True)
按数量升序排列 : df[‘age’].value_counts(ascending=True,bins =5)
数据分组计数
统计该列非空值 :df[‘age’].count()
对象操作
Series
构建
data=[1,2,3]
index=[‘a’,‘b’,‘c’]
s=pd.Series(data=data,index=index)
增
s1.append(s2,ignore_index=False)
ignore_index 是否更换为新索引
删
del s1[‘a’]
del s1[‘a’,‘b’,inplace=True)
改
通过复制,修改
s1=s.copy()
s1[‘索引’]=修改值
直接原位置修改
s1.replace(to_replace=100,value=101,inplace=False)
to_replace 要修改的值
value 改成值
True/False 是/否 修改源值
改索引
s1.index=[‘a’,‘b’,‘w’]
s1.rename(index=[‘a’,‘A’].inplace=Ture)
查
切片
loc
iloc
DataFrame
构建
data=[[1,2,3],[4,5,6]]
index=[‘a’,‘b’]
colums=[‘A’,‘B’,‘C’]
df=pd.DataFrame(data=data,index=index,colums=colums)
查
[‘列名’],loc,iloc
改
值: df.loc[‘a’][‘A’]=150
索引: df.index[‘f’,‘g’]
增
自增 : df.loc[‘c’]=[1,2,4]
增加另一个 : df3=pd,concat([df,df2],axis=0) 默认按axis=0,竖向拼接
删
行 : df.drop([‘索引’],axis=0,inplace=True)
列
一列 : del df[‘列名’]
多列 : df.drop([‘a’,‘b’],axis=1,inplace=True)
drop函数制定删除对应的列,axis = 1表示针对列的操作,inplace为True,则直接在源数据上进行修改,否则源数据会保持原样。
纵向合并
concatpd:三个sheet的数据,维度完全一致(每列数据都是一样),纵向合并起来分析十分方便。对于列字段统一的数据,我们只需把表依次传入参数:
df=pd.concat([表1,表2,表3])
merge(多表合并)
pd.merge[‘表1’,‘表2’]
默认按共同列合并
pd.merge(‘表1’,‘表2’,on = ‘key’)
pd.merge(‘表1’,‘表2’,on = [‘key1’,‘key2’])
多个索引合并时
若两索引完全相同,则可避免产生重复列
若两索引不完全相同,则只返回相同部分的合并结果
pd.merge(‘表1’,‘表2’,on = [‘key1’,‘key2’],how=‘outer’) 并集
若不完全匹配,则用空值填充
显示设置
显示行数 :pd.get_option(‘display.max_rows’) 60
pd.set_option([display.max_rows’, N) N为你想显示的行数
显示列数 :pd.get_option(‘display.max_columns’) 20
pd.set_option([display.max_columns’, N)
显示字符串:pd.get_option(‘display.max_colwidth’) 50
pd.set_option(‘display.max_colwidth’,100)
显示小数位数:pd.get_option(‘display.precision’) 6
pd.set_option(‘display.precision’,5)
数据透视表
example_pivot=example .pivot(index=’ 类别1’,columns=‘类别2’,values=‘统计值’)
默认求平均
example_pivot=example .pivot(index=’ 类别1’,columns=‘类别2’,values='统计值’,aggfunc=‘sum/max/…’)
example_pivot.sum(axis=1)
example_pivot.sum(axis=0)
计数
pd.crosstab(index=df[‘sex’],columns=df[‘Pclass’])
排序
sort_values函数,顾名思义是按照数值进行排序,首先要传入的参数是列参数,即我们根据哪一列的数值来进行排序,ascending参数决定了排序顺序,等于Flase则是从大到小的降序,设置为True则是升序。
时间
构建
import pandas as pd
ts=pd.Timestamp(‘2019-07-24’)
ts=pd.to_datetime(‘2019-07-24’)
ts=pd.Series(pd.date_range(start=‘2019-07-24’,periods=10,freq=‘12H’))
构建时间序列,起始时间,数据个数,时间间隔
ts.month
ts.day
运算
ts+pd.Timedelta(‘5 days’)
导入
data=pd.read_csv(‘路径’)
data[‘Time’]=pd.to_datetime(data[‘Time’])
data=data.set_index(‘Time’)
作用:将文件文件中字符串格式转成时间格式,并替换为索引
简单方案
data=pd.read_csv(‘路径’,index_col=0,parse_dates=True)
取数据
切片
data[pd.Timestamp(‘2012-01-01 09:00’):pd.Timestamp(‘2012-01-01 19:00’)]
取最后的数据
data.tail()
取出指定的数据
data[2013]
data[‘2012-01’,‘2013-01’]
data[data.index.month ==1]
data[(data.index.hour >8)&(data.index.hour <12)]
data.between_time(‘08:00’,‘12:00’)
data.resample(‘D’).mean()
D代表天
按天统计
data.resample(‘3D’).mean()
data.resamp(‘M’).mean().
排序
data.sort_values(by=[‘group’,‘data’],ascending=[False,True],inplace=True)
参数:
by 排序列
ascending 升序/降序 False/True
多个列表示多条件排序,以第一列的为主
inplace 是否在原值更改
排序时去掉重复值(去掉共同重复值)
data.drop_duplicates()
以某列为主,去掉该列重复值,以及只保留仅能与该列剩余数据匹配的数据
data.drop_duplicates(subset=‘K1’)
map()
构建一个字典:food={ ‘A1’:‘A’,‘A2’:‘A’,‘B1’:‘B’}
将对应的数转换成类别
data[‘类别’]=data[‘原数据’].map(food)
输出,可将A1,A2 都转化成A
构建计算列
import numpy as np
df=pd.DataFrame({‘data1’:np.random.randn(5),‘data2’:np.random.randn(5) })
df.assign(ration = df[‘data1’]/df[‘data2’])
df.assign 可实现其他计算操作
删除
df.drop(‘列名’,axis=‘columns’,inplace=True)
替换
data.replace(‘需替换值’,‘替换值’,inplace=True)
构建分组区间
ages=[15,18,20,21,22,79]
bins=[10,40,80]
bins_res=pd.cut(aggs.bins)
把ages内的值,做映射,标记在哪个分组期间
各分组区间内的值计数
pd.value_counts(bins_res)
缺失值
判断是否为缺失值
df.isnull()
行是否含有
df.isnull().any()
列是否含有
df.isnull().any(axis=1)
用某值替换缺失值
df.fillna.(“某值”)
体现出缺失值及位置
df(df.isnull().any(axis=1))
字符串处理
大小写转换
s.str.lower()
s.str.upper()
字符串长度
s.str.len()
去除空格
s.str.strip()
值替代
s.str.replace(" “,”-")
切分
s.str.split(’-",expand=True,n= X)
expand 是否切分开作为新的数据
X 为切分次数,小于等于"-"的个数
判断是否包含
s.str.contains(‘xxx’)
切分操作
s.str.get_dummies(sep=“分隔符”)