pandas数据处理

数据处理基本流程

数据预处理大致包含以下4个基本流程:

数据整合
数据清洗
数据转化
数据简化

数据集处理

导入数据

df = pd.read_excel(r'F:\python数据集\豆瓣电影数据.xlsx')
df.head()

数据读取图

根据条件删选行

1.找到进球数Goals超过6的球队数据

euro12[euro12.Goals > 6]

在这里插入图片描述
2.选取以字母G开头的球队数据

euro12[euro12.Team.str.startswith('G')]

在这里插入图片描述

datatime类型处理

将int类型转换为datatime类型

在这里插入图片描述

将Year的数据类型转换为 datetime64

crime.Year = pd.to_datetime(crime.Year, format='%Y')

在这里插入图片描述

将列Year设置为数据框的索引

crime = crime.set_index('Year', drop = True)

在这里插入图片描述

删除名为Total的列

删除前:
在这里插入图片描述

crime = crime.set_index('Year', drop = True)
crime.head()

删除后:
在这里插入图片描述

数组合并
按照如下的元数据内容创建数据框

raw_data_1 = {
        'subject_id': ['1', '2', '3', '4', '5'],
        'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 
        'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']}

raw_data_2 = {
        'subject_id': ['4', '5', '6', '7', '8'],
        'first_name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 
        'last_name': ['Bonder', 'Black', 'Balwner', 'Brice', 'Btisan']}

raw_data_3 = {
        'subject_id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
        'test_id': [51, 15, 15, 61, 16, 14, 15, 1, 61, 16]}

1.将data1和data2两个数据框按照行的维度进行合并,命名为all_data

data1 = pd.DataFrame(raw_data_1, columns = ['subject_id', 'first_name', 'last_name'])
data2 = pd.DataFrame(raw_data_2, columns = ['subject_id', 'first_name', 'last_name'])
data3 = pd.DataFrame(raw_data_3, columns = ['subject_id','test_id'])

all_data = pd.concat([data1, data2])
all_data

在这里插入图片描述

2.将data1和data2两个数据框按照列的维度进行合并,命名为all_data_col

all_data_col = pd.concat([data1, data2], axis = 1)
all_data_col

在这里插入图片描述
3.按照subject_id的值对all_data和data3作合并

# 运行以下代码
pd.merge(all_data, data3, on='subject_id')

在这里插入图片描述
4.对data1和data2按照subject_id作连接

pd.merge(data1, data2, on='subject_id', how='inner')

在这里插入图片描述
5.找到 data1 和 data2 合并之后的所有匹配结果

pd.merge(data1, data2, on='subject_id', how='outer')

在这里插入图片描述

读取列名称

df.columns

在这里插入图片描述

在这里插入图片描述

查询索引

df.index

在这里插入图片描述
查看行列数

df.shape

在这里插入图片描述
探索数据类型

df.info()

在这里插入图片描述

对于数据的分组和分组运算
A
在这里插入图片描述

单类分组

A.groupby("性别")

在这里插入图片描述
首先,我们有一个变量A,数据类型是DataFrame

想要按照【性别】进行分组

得到的结果是一个Groupby对象,还没有进行任何的运算。

多类分组

A.groupby( ["班级","性别"])

在这里插入图片描述
我们还可以一次运用多个函数计算

agg()
分组多个运算

A.groupby( ["班级","性别"]).agg([np.sum, np.mean, np.std]) # 一次计算了三个

在这里插入图片描述
例如:


c = chipo[['item_name','quantity']].groupby(['item_name'],as_index=False).agg({'quantity':sum})
c.sort_values(['quantity'],ascending=False,inplace=True)
c.head()

在这里插入图片描述

查看缺失值所占比例
缺失值所占总值的比例 isnull().sum(全部的True)/X.shape[0]

df.isnull().mean()

在这里插入图片描述
探索标签的分类
查看电影类型分类

Y = df.loc[:,['类型']]
np.unique(Y)

在这里插入图片描述
nunique() 返回的是唯一值的个数

df['类型'].nunique()

在这里插入图片描述

例如:

重新设置索引

分训练集,测试集

Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,Y,test_size=0.3,random_state=420) #随机抽样
Xtrain.head()

分完训练集,测试集没有索引
重新设置索引
方法一:

for i in [Xtrain, Xtest, Ytrain, Ytest]:
    i.index = range(i.shape[0])
#     print(i.shape[0])

恢复索引值
方法二:
unstack()函数
索引重排

查看样本是否有不平衡问题(统计电影各类型数量)
df[‘类型’] 类型为series类型

df['类型'].value_counts()

在这里插入图片描述
方法二

from collections import Counter
print('类型: ', Counter(df['类型'])) 

在这里插入图片描述

取电影类型第一个样本类型

df['类型'].value_counts()[0]

在这里插入图片描述
将标签编码

电影各类型进行编码以便后期进行分析

Y_train = df['类型']
from sklearn.preprocessing import LabelEncoder #标签专用
encorder = LabelEncoder().fit(Y_train) #允许一维数据的输入的
#使用训练集进行训练,然后在训练集和测试集上分别进行transform
Ytrain = pd.DataFrame(encorder.transform(Y_train))
Ytrain

在这里插入图片描述
设定数值型特征的统计量
第一个percentiles,这个参数可以设定数值型特征的统计量,默认是[.25, .5, .75],也就是返回25%,50%,75%数据量时的数字,但是这个可以修改的,
df[‘Parch’].describe(percentiles=[.2,.75, .8])默认有5

Xtrain.describe([0.01,0.05,0.1,0.25,0.5,0.75,0.9,0.99]).T

在这里插入图片描述
排序

对数据框discipline按照先Red Cards再Yellow Cards进行排序

discipline.sort_values(['Red Cards', 'Yellow Cards'], ascending = False)

在这里插入图片描述

缺失值处理

缺失值产生原因

pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。
在这里插入图片描述

缺失值产生机制
完全随机缺失(Missing Completely At Random):数据缺失和缺失值及观测值都无关
e.g 医生随机性地忘记记录身高、体重
随机缺失(Missing At Random):数据缺失仅和观测值相关
e.g 老年患者可能会忘记告知医生自己是否患过肺炎,在这种情况下,肺炎这个变量的缺失情况与年龄这个变量相关。
非随机缺失(Missing Not At Random):数据缺失同时和缺失值及观测值相关
e.g 血压正常患者可能会缺失血压测量记录

删除法

删除法”,顾名思义,即直接删除缺失相关的记录, 根据删除的范围可分为:

完全案例删除(Complete Cases Analysis)
有效案例删除(Avaliable Cases Analysis)
pandas中的dropna提供了各种高效快捷的删除方式。

df.dropna()   #删除所有带缺失数据的行

在这里插入图片描述
完全案例删除
在完全案例删除中,我们将会删除包含任何包含缺失值的记录。

这样做的前提假设是 删除后的子集能够代表样本。

请注意,这种方法仅限于完全随机缺失的情况。

complete_df = iac_df.dropna(how='any')
complete_df.head(10)

在这里插入图片描述
可用案例删除
而可用案例删除则会根据具体的分析需求,删除相关变量的缺失记录。

avaliable_df = iac_df.dropna(how='all', subset=['wbc_first'])
avaliable_df.shape

在这里插入图片描述
插补法(Imputation)

“插补法”,将缺失值通过某些值进行替代。

中值插补
用该列的中位数替代缺失值

med_impute = df.fillna(value=df.median())

均值插补
用该列的平均值替代缺失值

mean_impute = df.fillna(value=df.mean())

均值插补
用该列的众数替代缺失值

df.fillna(df.mode()[0], inplace=True)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值