【三 (5)数据处理工具之 pandas用法大全】

目录

文章导航

【一 简明数据分析进阶路径介绍(文章导航)】

一、事先准备

1、引入依赖

import numpy as np
import pandas as pd

2、导入数据表

df=pd.DataFrame(pd.read_csv('name.csv',header=1))
df=pd.DataFrame(pd.read_excel('d:/name.xlsx'))

3、构造数据集

df ={'姓名':['小明','小黄','小红 ','大美','小香'],  
     '性别':['男','men','women','女','女']} 

二、数据预览

1、查看数据集的大小(长宽)

df.shape 

2、查看数据表信息

df.info() 

3、查看数据格式

df.dtypes 
df['date'].dtype

4、查看数据表数值

df.values

5、查看列(字段)名称

df.columns

6、查看前N行数据。默认head()显示前5行数据,可以自己设置参数值来确定查看的行数。下面的代码中设置查看前3行的数据

df.head(3)

7、查看后N行数据。默认tail()显示后5行数据,可以自己设置参数值来确定查看的行数。下面的代码中设置查看后3行的数据

df.tail(3)

8、head()方法和tail() 方法则是分别显示数据集的前n和后n行数据。如果想要随机看N行的数据,可以使用sample()方法

df.sample(3)

9、汇总数据描述性统计信息,如均值、中位数、最大值、最小值等

df.describe()

10、查看空值

isnull是Python中检验空值的函数,返回的结果是逻辑值,包含空值返回True,不包含则返回False。可以对整个数据表进行检查,也可以单独对某一列进行空值检查。

df.isnull()
df['price'].isnull()

11、查看哪些列存在缺失值

df.isnull().any() 

12、将列中为空的个数统计出来

df.isnull().sum()

三、数据清洗

1、删除空值

df.dropna(how='any') #去除任何有空值的行

2、使用数字对空值进行填充

df.fillna(50) #用50进行填充

3、使用 price 列的均值来填充

df['price'].fillna(df['price'].mean())
df['price'].fillna(df['price'].mean(),inplace=True)   #直接修改原对象

4、针对连续变量,可以用前一个值填充

df.fillna(method="pad")

5、删除重复值

df['city'].duplicated() #保留最先出现的数据,删除后面重复出现的数据
df['city'].drop_duplicates(keep='last') #保留最后出现的数据,删除前面重复出现的数据

6、将特定值替换为缺失值

df.replace(27,pd.NaT)

7、清除字符空格

df['city'].map(str.strip)

8、将字段的值修改为int格式

df['price'].astype('int')
df['price'] = df['price'].astype('int') # astype()没有replace=True的用法,想要在原数据上修改,要写成该形式

9、rename()重命名用于更改行列的标签,即行列的索引。可以传入一个字典或者一个函数

df.rename(columns={'排名': 'RANK'}, inplace=True)

10、行列转置,我们可以使用T属性获得转置后的DataFrame

df.T

11、删除列,drop()

df.drop(columns=["RANK"],inplace=True)

12、删除第2行

df.drop(2)
df.drop(df.index[1], inplace=True)

13、删除a字段列

df.drop('a', axis=1)

14、删除第2列

df.drop(df.index[1], inplace=True)

15、删除索引为row2的行

df.drop('row2')

16、删除索引为col2的列

df.drop('col2', axis=1,inplace=True)

17、在数据框中插入一行数据

df.loc[len(df)] =['五年级',77,88] #行从0开始,length从1开始,将最后一行的后一行指定为新数据即为插入

四、数据操作

1、replace 将指定位置的字符,替换为给定的字符串

df['性别'].replace('women','女',inplace=True)
df['性别'].replace('men','男',inplace=False)

2、rank()方法可以实现数据排名

df["排名"] = df['年龄'].rank(method="dense", ascending=False)

3、限制数据范围。比如每月的迟到天数一定是在0-31天之间,clip()

df["迟到天数"] = df["迟到天数"].clip(0,31)

4、唯一值,unique()是以数组形式返回列的所有唯一值,而nunique()返回的是唯一值的个数

df["年龄"].unique()
df["年龄"].nunique()

5、apply()函数的功能是将一个自定义函数作用于DataFrame的行或者列;applymap()函数的功能是将自定义函数作用于DataFrame的所有元素。他们通常也与匿名函数lambda一起使用。

df["年龄"].apply(lambda x: x+1)

6、计算字符串长度

df["性别"].str.len()

7、字符串的拼接-cat函数

df["姓名"].str.cat(df["家庭住址"],sep='-'*1)

8、replace指定的位置字段的字符

df["收入"].str.replace("\d+\.\d+","正则")

9、slice_replace 使用给定的字符串,替换指定的位置的字符

df["电话号码"].str.slice_replace(4,8,"*"*4)

10、判断某个字符串是否包含给定字符-contains函数

df["家庭住址"].str.contains("广")
df['家庭住址'].str.contains('广', na=False)

11、判断某个字符串是否以…开头/结尾

df["姓名"].str.startswith("黄")   
df["英文名"].str.endswith("e")

12、计算给定字符在字符串中出现的次数

df["电话号码"].str.count("3")

13、获取指定位置的字符串-get函数

df["姓名"].str.get(-1)  
df["身高"].str.split(":")  
df["身高"].str.split(":").str.get(0)

14、英文大小写转换

df["英文名"].str.upper()  
df["英文名"].str.lower()

15、在字符串的左边、右边或左右两边添加给定字符

df["家庭住址"].str.pad(10,fillchar="*") #左边
df["家庭住址"].str.pad(10,side="right",fillchar="*")  #右边
df["家庭住址"].str.center(10,fillchar="*") #两边

16、重复字符串几次

df["性别"].str.repeat(3)

17、利用正则表达式,去字符串中匹配,返回查找结果的列表

df["身高"]  
df["身高"].str.findall("[a-zA-Z]+")

18、接受正则表达式,抽取匹配的字符串(一定要加上括号)-extract、extractall函数

df["身高"].str.extract("([a-zA-Z]+)")  

五、数据筛选

1、按索引选择行

df.loc[[0,1]] # 选择索引是0和1的记录
df.loc[[0,1],['班级']] # 选择索引是0和1,列名为班级的记录

2、按数字索引选择行

df.iloc[[0]]  # 选择索引是0的记录

3、使用切片选择行

df[:5] #选择索引从0到5的记录

4、对数据框的行进行筛选

df[df["男生数量"]>23] #筛选男生数量大于23的记录

5、对数据框的行和列进行筛选

df.loc[df["男生数量"]>23,["班级"]] #筛选男生数量大于23的记录的班级字段

6、筛选姓名中包含“黄”这个字符的所有行

df[df['姓名'].str.contains('黄')]

7、query()查询方法也可以用来筛选数据,比如查询“语文”成绩大于“数学”成绩的行记录

df.query("语文 > 数学")
df.query('city==["beijing","shanghai"]')

8、select_dtypes()方法可用于筛选某些数据类型的变量或列。举例,我们仅选择具有数据类型’int64’的列。

df.select_dtypes("int64")

9、isin()接受一个列表,判断该列中元素是否在列表中

name_list = ["张三", "李四"]
df[df["姓名"].isin(name_list)]

10、使用“与”条件进行筛选

df.loc[(df['age'] > 25) & (df['city'] == 'beijing'), ['id','city','age','category','gender']]

11、使用“或”条件筛选

df.loc[(df['age'] > 25) | (df['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['age']) 

12、使用“非”条件进行筛选

df.loc[(df['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']) 

六、数据汇总

1、对所有列进行计数汇总

df.groupby('city').count()

2、对特定的列进行计数汇总

df.groupby('city')['id'].count()

3、对city字段进行汇总并计算price的合计和均值

df.groupby('city')['price'].agg([len,np.sum,np.mean])

4、数据透视表

pd.pivot_table(df,index=["city"],values=["price"],columns=["size"],aggfunc=[len,np.sum],fill_value=0,margins=True)

七、统计运算

1、计数

df['男生数量'].count()

2、求和

df['男生数量'].sum()

3、平均值

df['男生数量'].mean()

4、中位数

df['男生数量'].median()

5、众数

df['男生数量'].mode()

6、最大值

df['男生数量'].max()

7、某一行的最大值

df.loc[2,['男生数量','女生数量']].max()

8、最小值

df['男生数量'].min()

9、某一行的最小值

df.loc[2,['男生数量','女生数量']].min()

10、标准差

df['男生数量'].std()

11、方差

df['男生数量'].var()

12、计算两个字段间的协方差

df['price'].cov(df['m-point']) 

13、数据表中所有字段间的协方差

df.cov()

14、两个字段的相关性分析

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

15、数据表的相关性分析

df.corr()

16、分位数

df['语文'].quantile()

17、偏态系数

df['语文'].skew()

18、峰态系数

df['语文'].kurt()

19、累加

df["语文总分"] = df['语文'].cumsum()

八、数据输出

1、输出到 excel 格式

df.to_excel('d:/excel_to_python.xlsx', sheet_name='bluewhale_cc')

2、输出到 CSV 格式

df.to_csv('excel_to_python.csv')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值