Pandas库常用知识记录

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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值