python数据处理
1.生成数据2.数据表检查3.数据表清洗4.数据预处理5.数据提取6.数据筛选7.数据汇总8.数据统计9.数据输出
1.生成数据
1.导入数据表
df=pd.read_excel('C:/Users/Admin/Desktop/types/output.xlsx')
df1=pd.read_csv('C:/Users/Admin/Desktop/types/output.csv')
2.创建数据表
df=pd.DataFrame(({"id":[1001,1002,1003,1004,1005,1006],
"date":pd.date_range('20130102',periods=6),
"city":['Beijing','SH','guangzhou','Shenzhen','shanghai','BEIJING'],
"age":[23,44,54,32,34,32],
"category":['100-A','100-B','110-A','110-C','210-A','130-F'],
"price":[1200,np.nan,2133,5433,np.nan,4432]}))
2.数据表检查
1.查看维度(行列)
df.shape
(6, 6)
2.数据表信息
df.info()
3.查看数据格式
#查看数据表各列格式
print(df.dtypes)
#查看数据表单列格式
print(df['city'].dtype)
4.查看空值
#检查数据是否为空值
print(df.isnull())
#检查特定列是否为空值
print(df['price'].isnull())
5.查看唯一值
#查看city列中的唯一值
print(df['city'].unique())
['Beijing ' 'SH' ' guangzhou ' 'Shenzhen' 'shanghai' 'BEIJING ']
6.查看数据表数据
print(df.values)
7.查看列名称
print(df.columns)
Index(['id', 'date', 'city', 'age', 'category', 'price'], dtype='object')
8.查看前多少行数据
#不设置值时,默认为5行
print(df.head(3))
9.查看前多少行数据
#不设置值时,默认为5行
print(df.tail(3))
3.数据表清洗
1.处理空值(删除或填充)
#删除数据表中含有空值的行
print(df)
df.dropna(how='any')
#使用数据0填空数据表中空值
df.fillna(value=0)
#使用price均值对NA进行填充
print(df['price'].fillna(df['price'].mean()))
2.清理空格
#清除city字段中的字符空格
df['city']=df['city'].map(str.strip)
3.大小写转换
#city列大小写转换
df['city']=df['city'].str.lower()
4.更改数据格式
#更改数据格式
df['age']=df['age'].astype(int)
5.更改列名称
df.rename(columns={'category':'category-size'})
6.删除重复值
print(df['city'])
#删除后出现的重复值(第一次的beijing被保留,最后出现的beijing被删除)
print(df['city'].drop_duplicates())
#设置keep='list'参数后,与之前删除重复值的结果相反,第一位出现的beijing被删除,保留最后一位出现的beijing
print(df['city'].drop_duplicates(keep='last'))
7.数值修改及替换
#数据替换
print(df['city'].replace('sh','shanghai'))
4.数据预处理
1.数据表合并
df1=pd.DataFrame({'id':[1001,1002,1003,1004,1005,1006,1007,1008],
'gender':['male','female','male','female','male','female','male','female'],
'pay':['Y','N','Y','Y','N','Y','N','Y'],
'm-point':[10,12,20,40,40,40,30,20]})
#数据表匹配合并
#内连接
df_inner=pd.merge(df,df1,how='inner')
#左连接
df_left=pd.merge(df,df1,how='left')
#右连接
df_right=pd.merge(df,df1,how='right')
#外连接
df_out=pd.merge(df,df1,how='outer')
2.设置索引列
print(df_inner.set_index('id'))
3.排序(按索引,按数值)
#按特定列的值排序
print(df_inner.sort_values(by=['age']))#默认升序,降序ascending=False
#按索引列排序
print(df_inner.set_index(keys='date'))#行索引进行排序
4.数据分组
#如果price列的值>3000,group列显示high,否则显示为low
df_inner['group']=np.where(df_inner['price']>3000,'high','low')
#对复合多个条件的数据进行分组标记
#对city列等于beijing并且price列大于等于4000的数据标记为1
df_inner.loc[(df_inner['city']=='beijing')&(df_inner['price']>=4000),'sign']=1
5.数据分列
#对category字段的值依次进行分列,并创建数据表,索引值为df_inner的索引列,列名称为category和size
split=pd.DataFrame((x.split('-')forxindf_inner['category']),index=df_inner.index,columns=['category','size'])
print(split)
#将完成分列后的数据表与原df_inner数据表进行匹配
df_inner=pd.merge(df_inner,split,right_index=True,left_index=True)
print(df_inner)
5.数据提取
1.按标签提取(loc)
#按索引提取单行的数据
print(df_inner.loc[3])
#按索引提取区域行数值
print(df_inner.loc[0:5])#提取0到5的数据行
#设置日期为索引
df_inner=df_inner.set_index('date')
#重设索引
print(df_inner.reset_index())#恢复索引
#提取4日之前的所有数据
print(df_inner[:'2013-01-04'])#从开始提取到这个日期
2.按位置提取(iloc)
#使用iloc按位置区域提取数据
print(df_inner.iloc[:3,:2])#行列
#使用iloc按位置单独提取数据
print(df_inner.iloc[[0,2,5],[4,5]])
3.按标签和位置提取(ix)
#使用ix按索引标签的位置混合提取数据
print(df_inner.ix[:'2013-01-03',:4])
4.按条件提取(区域和条件值)
#判断city列的值是否为beijing
print(df_inner['city'].isin(['beijing']))
#先判断city列里是否包含beijing和shanghai,然后将复合条件的数据提取出来
print(df_inner.loc[df_inner['city'].isin(['beijing','shanghai'])])
category=df_inner['category_x']
print(category)
#提取前三个字符,并生成数据表
print(pd.DataFrame(category.str[:3]))
6.数据筛选
使用‘与’条件进行筛选
#筛选大于25岁并且城市为北京的这些列['id','city','age','category_x','gender']的值
print(df_inner.loc[
(df_inner['age']>25)&(df_inner['city']=='beijing'),['id','city','age','category_x','gender']])
使用‘或’条件筛选
#筛选大于25岁或城市为北京的这些列['id','city','age','category_x','gender']的值,并按照年龄对其进行排序
print(df_inner.loc[
(df_inner['age']>25)|(df_inner['city']=='beijing'),['id','city','age','category_x',
'gender']].sort_values(by='age'))
print(df_inner.loc[
(df_inner['age']>25)|(df_inner['city']=='beijing'),['id','city','age','category_x',
'gender']].sort_values(by='id').city.count())
使用query函数进行筛选
#筛选出city列等于beijing或者shanghai的
print(df_inner.query('city==["beijing","shanghai"]'))
print(df_inner.query('city==["beijing","shanghai"]').price.sum())
7.数据汇总
1.分类汇总
#对所有列进行计数汇总
print(df_inner.groupby('city').count())
#按照城市对id字段进行汇总计数
print(df_inner.groupby('city')['id'].count())
#对两个字段进行汇总计数
print(df_inner.groupby(['city','size'])['id'].count())
#对city字段进行汇总并计算price的合计和均值
print(df_inner.groupby('city')['price'].agg([len,np.sum,np.mean]))
2.数据透视
#数据透视表
#设置city为行字段,size为列字段,price为值字段
print(pd.pivot_table(df_inner,index=["city"],values=["price"],columns=["size"],
aggfunc=[len,np.sum],fill_value=0,margins=True))
8.数据统计
1.数据采样
#简单的数据采样(随机抽取3条数据)
print(df_inner.sample(n=3))
#手动设置采样权重
weights=[0,0,0,0,0.5,0.5]
print(df_inner.sample(n=2,weight=weights))
#sample函数中的参数replace,用于设置采样数是否放回
#采样后不放回
print(df_inner.sample(n=6,replace=False))
#采样后放回
print(df_inner.sample(n=6,replace=True))
2.描述统计
#数据表描述性统计
print(df_inner.describe(),round(2).T)
3.标准差
print(df_inner['price'].std())
4.协方差
#两个字段间的协方差
print(df_inner['price'].cov(df_inner['m-point']))
#数据表中所有字段间的协方差
print(df_inner.cov())
5.相关分析
print(df_inner['price'].corr(df_inner['m-point']))
#数据表相关性分析
print(df_inner.corr())
9.数据输出
1.写入Excel
#输出到Excel格式
df_inner.to_Excel('excel_to_python.xlsx',sheet_name='bluewhale')
2.写入csv
#输出到CSV格式
df_inner.to_csv('excel_to_python.csv')