栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python数据预处理总结

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python数据预处理总结

文章目录
      • 前言
      • 1. 查看某个特征在列名中的位置(索引)
      • 2. 去掉某个特征
      • 3. 将object类型转换为数值型
      • 4. 合并数据框
      • 5. 重新加载py文件
      • 6. data1['apply_id']=data2['apply_id']只有一个值?

前言

数据预处理或者说数据处理过程当中,往往会遇到很多比较基础又容易忘记、混淆的命令,因此这里做一个总结,免得每次又去翻石沉大海的笔记。

本文的背景以风控大数据为例

1. 查看某个特征在列名中的位置(索引)
  • ls.index(指定元素):只能返回首次出现的索引
#查看列名
data.columns
#转换成列表
data.columns.to_list()
#查找索引 ls.index()
a=['hello','world','nice','to','meet']
a.index('hello')

:返回索引值 0
2. 去掉某个特征

背景:在我们的data中,有一个特征是不需要纳入指标筛选范畴的,比如说创建时间create_date,客户唯一标识符apply_id,标签y等等,现在我要对这些变量进行删除,生成feature_list0

  • remove 删除单个元素,且根据值进行删除
  • pop 根据索引值进行删除,并且返回删除的对象
  • del 也是根据索引值进行删除,只是表达方式不一样del data[1]
  • data.drop([列1,列2],axis=1,inplace=True):用于数据框的删除行或者列,可以多个进行删除,此时只需将删除的列名或者索引放在列表中作为输入参数即可。
a.remove('hello')
a
-> ['world', 'nice', 'to', 'meet']
a.pop(0) 会得到删掉的值'world'
a
-> ['nice', 'to', 'meet']
del a[0]
a
-> ['to', 'meet']

对于数据框来说,删掉某一行或者某一列采用drop函数

用法如下: Remove rows or columns by specifying label names and corresponding
axis, or by specifying directly index or column names.

import numpy as np
df = pd.DataFrame(np.arange(12).reshape(3, 4),columns=['A', 'B', 'C', 'D'])
print('原来的数据如下:')
print(df)
#删除BD列
df.drop(['B','D'],axis=1,inplace=True)
print('======*========')
print('删除B、D列之后的数据')
print(df)
#删除0,1行
df.drop([0,1],axis=0,inplace=True)
print('删除0 1行之后的数据')
print(df)

结果表示如下:

3. 将object类型转换为数值型

背景:现在我解析出来的三方数据是类别型的object,但是其中又包含类似信用分这样的数值型的特征。

经过查找,发现数值分数中混入了俩字符串ABDCHSI这种,导致没有办法将字符串类型转换成整数型,因此现在想要把字符串变成空值

经过多方尝试,暂时想到的方法还是循环呜呜呜

主要用到的知识点:

  • lambda x:x.isdigit() 对每一个字符进行是否为数值的判断
fm_score=meituan['score']
h=list(fm_score.map(lambda x:x.isdigit())) #检测每一个字符是否为数值型
k=[] #主要是想存储非数值的那些值的索引是多少
for i in range(len(h)):
    if h[i]==False:
        k.append(i)
k #查看一下k

for j in k:
    print(list(fm_score)[j])
#输出那些非数值型的值

#发现输出的都是一样的值,因此选择replace进行替换
meituan['score']=meituan['score'].map(lambda x:int(x))

#主要是如果存在字母的字符串的话,没有办法进行int
4. 合并数据框

背景:对sql立面读出来的多个数据进行合并

  • 添加新的列/行
    pd.concat([df1,df2],axis=1),
    1 concat相当于全连接,待合并的序列放在列表中作为一个输入参数,
    2 按行合并axis=0,按列合并axis=1
    3 join:{‘inner’,‘outer’}表达连接方式
df = pd.DataFrame(np.arange(12).reshape(3, 4),columns=['A', 'B', 'C', 'D'])
df2=pd.DataFrame({
    'f':['1','2','hello']
})
pd.concat([df2,df],axis=1)

结果展示如下:

  • 按关联列合并:pd.merge()
    用法:pd.merge(A,B,on=‘相同列’)
    how={‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’} 表示连接方式,默认是inner join

pd.concat和pd.merge的区别

  • 当DataFrame的合并个数>2时,pd.concat()函数能同时合并,pd.merge()函数只能依次两两合并;
  • pd.concat()函数是轴向合并 ,pd.merge()函数是关联列合并 ;
  • 注意调用方法,书写格式不同;
  1. 各参数的使用不同。
5. 重新加载py文件

背景:在写代码的过程,有时会需要修改已加载的包(比如自己写的模块),此时为了不重新启动现有整个py文件,只需重新加载修改的模块

(1) 首先写入一个py文件,比如说print(‘hello world’)
(2) 然后修改py文件,print(‘modify’)
现在重新加载py文件
使用importlib模块里面的reload函数

import try1
-> hello world

import importlib
importlib.reload(try1)
-> modify

6. data1[‘apply_id’]=data2[‘apply_id’]只有一个值?

背景:向data1里面添加data2的apply_id列
原因尚不明确???
解决方法

  • .values是将序列转化为数组的形式,然后再将数组转化为列表list()的形式,然后就可以将得到列表赋值给新的列
meituan['apply_id']=list(xindai['apply_id'].values)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号