Pandas主要有两种数据结构,series和dataframe。
Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成,即index和values两部分,可以通过索引的方式选取Series中的单个或一组值。创建series可使用
import pandas as pd
pd.Series(list,index=[ ])
第二个参数是Series中数据的索引,可以省略。
主要常用的是Dataframe,是一个表格型的数据类型,每列值类型可以不同。创建dataframe可用:
pd.DataFrame(data,columns = [ ],index = [ ])
如:
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
pd.DataFrame(data, columns=['year', 'state', 'pop'],
index=['one', 'two', 'three', 'four', 'five', 'six'])
从csv和excel读入数据:
df = pd.DataFrame(pd.read_csv('xxx.csv',header=1))
df = pd.DataFrame(pd.read_excel('xxx.xlsx'))
(注:以下常用的用加粗标注)
查看表信息:
- df1.shape 维度查看
- df1.info() 基本信息查看
- df1.dtypes 每一列的数据格式
- df1['some_column'].dtype 某一列的数据格式
- df1.isnull 是否空值
- df1['some column'].unique 某一列的唯一值
- df1.values 查看数据表的值
- df1.columns 查看列名称
- df1.head/df.tail 查看前/后五行
数据访问:
- df1.loc[3] 访问行
- df1['city'] 访问列
- df1=df1.set_index('index') 设置日期为索引
- df1[:'2020-10-27'] 提取10月27日之前所有数据
- df1.iloc[:3,:2] 使用iloc按位置区域访问数据,前三行,前两列
- df1.iloc[[0,2,6],[6,8]] 访问0,2,6行,6,8列
- df1.ix[:'2020-10-27', :4] 使用ix按索引标签和位置混合访问数据, 2020.10.27之前,前四列数据
- df1['city'].isin(['chengdu']) 判断city列的值是否为成都
- df1.loc[df1['city'].isin(['chongqing', 'chengdu'])] 将city列里是重庆或成都的数据提取出来
- pd.DataFrame(category.str[:3]) 提取前三个字符,并生成数据表
数据筛选:
- df1.loc[(df1['age']>25)&(df1['city']=='chengdu'), ['id', 'city', 'age', 'gender']] 使用与筛选。或|
- df1.loc[(df1['city'] != 'chengdu'), ['id', 'city', 'age', 'gender']].sort(['id']).city.count() 对筛选后的数据按city列进行计数
- df1.query('city == ['chengdu', 'chongqing']') 使用query函数进行筛选
- df1.query('city == ['chengdu', 'chongqing']').price.sum() 对筛选后的结果price进行求和
数据汇总
- df1.groupby('city').count() 按城市对所有列进行计数
- df1.groupby('city')['id'].count() 按城市对id字段进行计数
- df1.groupby(['city', 'size'])['id'].count() 对两个字段进行汇总计数
- df1.groupby('city')['price'].agg([len, np.sum, np.mean]) 对city字段进行汇总,并分别计算price的和与均值
数据统计:
- df1.sample(n=3) 简单的数据采样
- df1.sample(n=2, weights=[0, 0, 0, 0, 0.5, 0.5]) 手动设置采样权重
- df1.sample(n=6, replace=False) 采样后不放回(True为放回)
- df1.describe().round(2).T 数据表描述性统计(round函数设置显示小数位,T表示转置)
- df1['price'].std() 计算列的标准差
- df1['price'].cov(df1['m-point']) 计算两个字段间的协方差(df1.cov() 为计算所有字段间的协方差)
- df1['price'].corr(df1['m-point']) 两个字段的相关性分析(-1到1之间,1正相关,0不相关,-1负相关)
- df1.corr() 对数据表的相关性分析
数据表清洗:
- df.fillna(value=0) 用0填充空值
- df['ages'].fillna(df['ages'].mean()) 用平均年龄填充年龄空值
- df['city']=df['city'].str.lower 清除city字段的字符空格
- df['city']=df['city'].str.lower() 大小写转换
- df['price'] = df['price'].astype('float') 更改数据格式
- df.rename(coulmns={'category': 'category2'}) 更改列名称
- df['name'].drop_duplicates(keep='last') 删除先出现的重复值,默认是删除后面的重复值
- df['city'].replace('cd', 'Chengdu')
数据预处理
表合并
- df_merged = pd.merge(df1, df2, how='inner') 表连接 how包括'inner, 'left', 'right', 'outer'
- df_appended = pd1.append(df2) 表格2加入到表格1
- result = pd1.join(pd2, on='key')
- result = pd.concat([df1, df2, df3], axis=0, join='outer',join_axes=None...copy=True)
其他处理
- df1.set_index('id') 设置索引列
- df1.sort_index() 按照索引列排序
- df1.sort_values(by=['age']) 按照特定列的值排序
- df1['group']=np.where(df['age']>60, 'old','young') 如果age大于60,group显示old,否则显示young
- df1.loc[(df1['city']=='chengdu')&(df['salary']>=8000), 'sign']=1 对满足多个条件的数据进行分组标记
数据输出
- df1.to_csv('./xxxxx.csv') 写入到csv
- df1.to_excel('xxxxx.xlsx', sheet_name='hello')