数据分析——pandas

前言:python数据分析的基础知识,简单总结,主要是为了方便本身写的时候查看(大家可能看不太清楚T^T),发现有用的方法,随时补充,欢迎指正

数据分析专栏:python

  1. 数据分析——python基础
  2. 数据分析——numpy
  3. 数据分析——pandas
  4. 数据分析——数据可视化
  5. 数据分析——数据处理实例

数据处理——pandas

一、序列与数据框

1.1序列

series1=pd.Series([1,2,3])
out:  0 1
	  1 2
	  2 3----->这就是序列
series2=pd.Series({'a':1,'b':2})

序列的索引相似于一维数组
seres1.set_index('Day', inplace=True)//设置新的索引
series1[[0,1]]
out: 0 1
	 1 2

1.2数据框

三种方式:
一、嵌套列表
pd.DataFrame([['张三','23'],['李四','25']])
out:      0      1
     0   张三    23
     1   李四    25
     
二、字典
pd.DataFrame({'姓名':['张三','李四'],'年龄':[23,25]})

三、二维数组
pd.DataFrame(np.array([['张三','23'],['李四','25']]))

二、数据的读取

2.1读取txt和csv

pd.read_tabel(filepath,sep=',',parse,skiprows,nrows)
//参数不少这里不一一列举,用的时候能够查询资料
pd.read_csv(……)

2.2读取excel

pd.read_excel(io=filepath,sheetname,header,parse,skiprows)
//参数不少这里不一一列举,用的时候能够查询资料

三、数据类型的转换和统计

3.1数据类型的转换

df.shape//输出数据的行列数

df.dtypes//输出每一个数据变量的类型

data['name']=data['name'].astype('str')#数据类型的转换

pd.to_datatime(2017年10月,format='%Y年%m月')//时间形式的更改

array=df.values   #dataframe转化成array

df = pd.DataFrame(array)      #array转df
【注】还有不少,之后我用到会补充!

3.2数据的统计

df.describe()//输出数值型数据的统计描述

df.describe(include=['object'])//输出离散型(字符型)数据的统计描述

df['price'].std()//计算列的标准差

df['price'].cov(df['point'])// 计算两个字段间的协方差

df['price'].corr(df['point']) #相关系数在-1到1之间,接近1为正相关,接近-1为负相关,0为不相关

df['name'].value_counts()#词频统计

df.loc[df['number']>10]#筛选指定条件的行

df.iloc[:3,:2] #冒号先后的数字再也不是索引的标签名称,而是数据所在的位置,从0开始,前三行,前两列。只能用于整数索引

df_inner.iloc[[0,2,5],[4,5]] #提取第0、二、5行,四、5列

df.set_index('列名')#将列转换成行索引

df.columns=['公司','时间','地点','学校','地点','点击量']#设置列名

append方法:
a = {"x":1,"y":2}
data = data.append(a,ignore_index=True)

按指定列排序
DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
axis=0表示列
axis=1表示行

3.3数据处理

>>重复值处理
	any(df.duplicated())//检测是否有重复值
	df.drop_duplicates(inplace=Ture)//删除重复项
	
>>缺失值处理
	any(df.isnull()//检测是否有缺失值
	一、删除有缺失值的行
		df.dropna()
		
	二、删除变量(列)
		df.drop('age',axis=1)
		
	三、替换
		df.fillna(method='ffill')//前向替换
		df.fillna(method='bfill')//后向替换
		df.fillna(value=0)//常数替换
		df.fillna(value={'a':df.a.mode()[0]})//统计值替换
		
>>异常值处理
	一、标准差法
		xbar=df.num.mean()//获取平均值
		xstd=df.num.std()//获取标准差
		any(df.num>xbar+2*xstd)//上限检测
		any(df.num<xbar-2*xstd)//下限检测
			
	二、箱线图法
		Q1=df.num.quantile(q=0.25)//第一分位数
		Q3=df.num.quantile(q=0.75)//第三分位数
		IQR=Q3-Q1
		any(df.num>Q3+1.5*IQR)//上限检测
		any(df.num>Q1+1.5*IQR)//下限检测

	三、替换法处理异常值
		UL=Q3+1.5*IQR//异常值判别上限
		replace_value=df.num[df.num<UL].max()//找出低于判别上限的最大值
		df.num[df.num>UL]=replace_value//替换

四、数据子集的获取与储存

4.1数据子集的获取

//取中间三行,返回姓名和年龄两列
df.iloc[1:4,[0,2]]
df.loc[1:3,['name','age']]
df.ix[1:3,[0,2]]

4.2数据的存储

*写入excel
	df.to_excel('name1.xlsx', sheet_name='name2') 

*写入csv
	df.to_csv('name.csv')

五、表的合并与链接

一、合并函数concat
	pd.concat([df1,df2],axis=0,join='outer',join_axes=None,ingnore_index=False,keys=None])
	axis=0/1表示按照行/列合并
	join=‘outer/inner’表示合并全部数据或者公共部分数据
	ingnore_index是否生成新索引
	keys为合并后的数据添加新索引
	
二、链接函数merge
	pd.merge(left,right,how='inner',on=None,left_on=None,right_on=None)
	left表示主表
	right表示副表
	how表示链接方式inner、left、right、outer
	left_on表示主表的共同字段
	right_on表示副表的共同字段
相关文章
相关标签/搜索