Python数据预处理

123 阅读3分钟

数据导入

excel格式导入
df_excel = pd.read_excel('')
df_excel.head
text格式导入
df_text = pd.read_table('')
df_text.head()
csv格式导入

pd.read_csv参数详解

df_csv = pd.read_csv('./card_transdata.csv')
df_csv.head()

image.png

多文件合并

pd.concat参数详解

#读取多个文件合并成一个新文件
import glob
#设置文件路径
path = './'
#文件路径合并成多个数组
all_files = glob.glob(path + '/*.csv')
all_data = []
for filename in all_files:
    df = pd.read_csv(filename,index_col = 0,header = 0)
    all_data.append(df)
data2 = pd.concat(all_data,axis = 0,ignore_index =True)

数据查看

data = df_csv

#查看数据规模
data.shape

#查看各变量的数据类型
data.dtypes

#查看数据整体信息
data.info()

#查看数据描述统计
data.describe()

#查看所有列名
data.columns

#查看某一列的唯一值
data['used_chip'].unique()

#查看前五行
data.head()

#查看后五行
data.tail()

数据清洗

数据预处理
#数据类型转换
data['列名'] = data['列名'].astype('str')

#查看空值 判断各变量中是否存在缺失值(axis = 0代表就是列的意思)
data.isnull().any(axis = 1)

#定位缺失值所在的行
data.loc[data.isnull().any(axis = 1)]

#各变量中缺失值的数量
data.isnull().sum(axis = 0)
处理空值
#直接删除空值数据所在列(axis = 1表示列)
data2 = data.dropna(axis = 1)
data2.head()

#将缺失值填充为0
data_null_0 = data.fillna(0,inplace = False)
data_null_0.head()

#对缺失值进行填充(用中位数或平均数)
data_null_value = data.fillna(value = {'列名':data['列名'].mode()[0]},inplace = False)   //众数
data_null_value = data.fillna(value = {'列名':data['列名'].mean()},inplace = False)     //平均数
处理重复数据
#判断数据中是否存在重复值
data.duplicated().any

#删除重复值,会删除第一条后的,默认对所有变量判断
data.drop_duplicates()

#指定列名判断是否有重复值
data.drop_duplicates(subset=['列名','列名'],keep = 'first',inplace = False)
#first保留第一个,inplace=True对原数据修改

数据提取、筛选

#增加索引(自动增序)
data['index'] = data.index
data.head()

#增加一列(将已有数据的列数据添加到新列)
data['新列名'] = data['表中已有数据的列名']

#删除列或行时
data.drop(columns = '列名或行名')

#删除特定行,根据数值删除行
data['insured_sex'].isin(['MALE'])    #insured_sex这列是否有MALE值的数据
data[data['insured_sex'].isin(['MALE'])]  #查看data中insured_sex这列有MALE值的数据
data[~data['insured_sex'].isin(['MALE'])]  #查看data中insured_sex这列没有MALE值的数据
data_01 = data[data['insured_sex'].isin(['MALE'])]
data_01

数据排序

#值排序:从小到大,---列值
data.sort_values(by = '列名')

#根据两列值进行排序
data.sort_values(by = ['列名','列名'])

#值排序:从大到小
data.sort_values(by = '列名',ascending = False)

#索引排序
data.sort_index('index',ascending = False)

数据汇总

#例子
#不同性别的平均保险率
insurance = data.groupby(['insured_sex'])['policy_number'].mean()
#以列表的形式进行输出
data_insurance = insurance.reset_index()
data_insurance

#不同性别每年的平均保险率
data_insurance_annual = data.groupby(['insured_sex','Year'])['policy_number'].mean().reset_index()
data_insurance_annual.head()

数据标准化

将某列数据标准化

1. [0,1]标准化

[0,1] 标准化是最基本的一种数据标准化方法,指的是将数据压缩到0~1之间。

标准化公式如下

import numpy as np
def MaxMinNormalization(x):
    x = (x-np.min(x))/(np.max(x)-np.min(x))
    return x
2. Z-score 标准化

Z-score 标准化是基于数据均值和方差的标准化方法。标准化后的数据是均值为0,方差为1的正态分布。这种方法要求原始数据的分布可以近似为高斯分布,否 叫效果会很差。

标准化公式如下

import numpy as np
def ZescoreNormalization(x):
    x=(x-np-mean(x))/np.std(x)
    return x

数据存储

data.to_excel('路径',encoding="utf8")