python数据处理常用代码---数据预处理

首先写一dataframe吧

import pandas as pd
import numpy as np
test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[90,89,99,78,97,93],'english':[89,94,80,94,94,90]}
df = pd.DataFrame(test_dict)
df

现在记住它的样子,接下来就完全对它进行操作了
在这里插入图片描述

1.查看数据

#显示 dataframe 的简明摘要,包括每列非空值的数量
df.info()

在这里插入图片描述

# 返回每列数据的有效描述性统计
df.describe()

在这里插入图片描述

# 查看每列的索引号和标签
for i, v in enumerate(df.columns):
    print(i, v)

在这里插入图片描述

loc[]和iloc[]

这两个函数都是用来找数据框里数据的函数,简单来说是他们的区别
loc[]传入的是行、列的名字:如loc[‘第几行’,'那一列’]
iloc[]传入的是行、列的索引:如iloc[1,1]就是第二行第二列
ps: ':'表示所有的行或列

# 选择从 'id' 到'math.间所有列
df_means = df.loc[:,'id':'math']  #也可用索引号来实现iloc[:,:12]
df_means.head(3)

在这里插入图片描述

#若要选取不连续多个列还要Import numpy as np
df_max = df.iloc[:,np.r_[0:1,3:4]]
df_max

2.缺失数据的处理

我们对这张表稍微改一改,看,出现了一个空值
在这里插入图片描述

查看缺失数据

df.isnull().sum()

在这里插入图片描述

处理缺失值

1.直接删除

#axis=0表示删除这一行,=1表示删除这一列
df.dropna(axis=0,inplace=True)

2.填充

  • 填充为0
df.fillna(0, inplace=True) # 填充 0

填充均值、众数、种数

df.fillna(df.mean(),inplace=True) # 对每一列的缺失值,填充当列的均值

df.fillna(value={'edu_deg_cd': train_tag['edu_deg_cd'].mode()[0], # 对多列来说使用众数替换缺失
                        'deg_cd':train_tag['deg_cd'].mode()[0],
                        'atdd_type': train_tag['atdd_type'].mode()[0]},inplace = True)

3.数据冗余

df.duplicated() #来查看冗余行,
df.drop_duplicates(inplace=True) #删除冗余

4.脏数据的处理

如果表格里有一些不对的数据,或者填写有误的数据,我姑且把这种称为脏数据,那么对于脏数据应该怎么处理呢?我们来看下面这个数据框:

import pandas as pd
import numpy as np
test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[90,'\\N',99,78,97,93],'english':[89,94,80,94,94,90]}
df = pd.DataFrame(test_dict)
df

首先我们找到脏数据所在行:

df.loc[df['math']=='\\N']

在这里插入图片描述
然后我们想用平均分来替代这个脏数据

df.loc[df['math']=='\\N','math'] = df.drop(1).math.mean()
df

在这里插入图片描述

5.画图工具

1.箱线图

import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(10,4))
plt.xlim(-0,120)
sns.boxplot(x = df['math'])
print('Sale volume outliers:',df['math'][df['math']>100].unique())

在这里插入图片描述
2.饼图

import matplotlib.pyplot as plt
english = list(df['english'])
bins =[79,85,90,95]
english_cut = pd.cut(english, bins)
english_cut = list(english_cut)
english_list = []
count_list = []

for english in english_cut:
    if english not in english_list:
        count = english_cut.count(english)
        english_list.append(english)
        count_list.append(count)

print(english_list)
print(count_list)

# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体

plt.figure(figsize=(15,10))
plt.axis('equal')   #该行代码使饼图长宽相等
plt.pie(count_list, labels=english_list, explode=(0.1,0,0.2),autopct='%1.1f%%', startangle=90)

在这里插入图片描述

6.表与表的连接

这里介绍几个函数merge、concat和append
同样我们先来建立两张数据框

test_dict1 = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[88,89,99,78,97,93],'english':[89,94,80,94,94,90]}
df1 = pd.DataFrame(test_dict)
df1

test_dict2 = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'sex':['female','male','female','female','female','female']}
df2 = pd.DataFrame(test_dict)
df2

在这里插入图片描述

  • merge函数,默认情况下,会按照相同字段的进行连接,其他参数一般用不到,主要只能两两拼接
    在这里插入图片描述
df1.merge(df2)

在这里插入图片描述

  • concat()函数
pd.concat(objs, # 要合并对象
		axis=0, # 选择合并轴,0按列,1按行
		join='outer', # 连接方式,默认并集
		join_axes=None, #参数 join_axes 可指定 index 来对齐数据。这样会切掉指定的 index 之外的数据
		ignore_index=False, #当设为 ignore_index=True 时,新 df 将不会使用拼接成员 df 的 index,而是重新生成一个从 0 开始的 index 值
        keys=None, 
        levels=None, 
        names=None, 
        verify_integrity=False,
        copy=True
          )
pd.concat([df1,df2],axis=1)

在这里插入图片描述

pd.concat([df1,df2],axis=0)

在这里插入图片描述

  • append函数将被 append 的对象添加到调用者的末尾(类似 list 的方法)。
DataFrame.append(other, 
				ignore_index=False, 
				verify_integrity=False, 
				sort=None
				)
df1.append(df2)

在这里插入图片描述

7.分类变量改成数值变量

我们来看这样一张表,想要把性别变成数值变量

import pandas as pd
import numpy as np
test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[90,90,99,78,97,93],'sex':['F','M','F','M','M','M']}
df = pd.DataFrame(test_dict)
df

在这里插入图片描述

方法一:采用sklearn

from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
df['sex'] = class_le.fit_transform(df['sex'].values)
df

在这里插入图片描述
2, 映射字典将类标转换为整数

import numpy as np
# class_mapping = {label: idx for idx, label in enumerate(np.unique(df['sex']))}
class_mapping = {label: idx for idx, label in [[1,'M'],[0,'F']]}
df['sex'] = df['sex'].map(class_mapping)
df

在这里插入图片描述

3.使用one-hot编码创建一个新的虚拟特征

#3,使用one-hot编码创建一个新的虚拟特征
from sklearn.preprocessing import OneHotEncoder
pf = pd.get_dummies(df[['sex']])  #生成两列数据sex_F和sex_M,对应性别的行为1,否则为0
df = pd.concat([df, pf], axis=1)
df.drop(['sex'], axis=1, inplace=True)
df

在这里插入图片描述

8.改变数据类型

这里提供一个函数,大家自行融会贯通

def downcast_dtypes(df):
    cols_float = [c for c in df if df[c].dtype == 'float66']
    cols_object = [c for c in df if df[c].dtype == 'object']
    cols_int64_32 = [c for c in df if df[c].dtype in ['int64', 'int32']]
    df[cols_float] = df[cols_object].astype(np.float32)
    df[cols_object] = df[cols_object].astype(np.float32)
    df[cols_int64_32] = df[cols_int64_32].astype(np.int16)
    return df
  • 33
    点赞
  • 408
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,以下是使用 Python 进行数据预处理的一些示例代码: 1. 加载数据 可以使用 Pandas 库加载数据,并将其存储在 Pandas 数据框中。假设我们有一个名为 `data.csv` 的 CSV 文件,其中包含名为 `age`、`sex`、`height` 和 `weight` 的列,可以使用以下代码加载数据: ```python import pandas as pd df = pd.read_csv('data.csv') ``` 2. 删除缺失值 删除数据集中的缺失值可以使用 `dropna` 函数。下面的代码演示如何删除数据框中的缺失值: ```python df = df.dropna() ``` 3. 缺失值填充 有时,我们可能需要将缺失值替换为数据集中的其他值。可以使用 `fillna` 函数来执行此操作。下面的代码演示如何将缺失值替换为均值: ```python mean_age = df['age'].mean() df['age'] = df['age'].fillna(mean_age) ``` 4. 数据标准化 标准化数据可以使模型更容易处理,并且有时可以提高模型的准确性。可以使用 Scikit-learn 库中的 `StandardScaler` 类来标准化数据。下面的代码演示如何标准化数据: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df[['age', 'height', 'weight']] = scaler.fit_transform(df[['age', 'height', 'weight']]) ``` 5. 数据编码 在某些情况下,我们需要将分类变量编码为数值,以便模型可以处理它们。可以使用 Pandas 库中的 `get_dummies` 函数来执行此操作。下面的代码演示如何对 `sex` 列进行编码: ```python df = pd.get_dummies(df, columns=['sex']) ``` 这些是数据预处理中的一些基本操作,可以根据您的具体需求进行修改和扩展。 ### 回答2: 数据预处理数据分析的关键步骤之一,可以通过使用Python编写代码来实现。下面是一个简单的示例,展示了一些常用数据预处理技术: ```python import pandas as pd from sklearn.preprocessing import LabelEncoder, StandardScaler # 读取数据 data = pd.read_csv('data.csv') # 处理缺失值 data = data.dropna() # 删除包含缺失值的行 data = data.fillna(0) # 将缺失值替换为0 # 处理离散特征 label_encoder = LabelEncoder() # 创建LabelEncoder对象 data['category'] = label_encoder.fit_transform(data['category']) # 将离散特征编码为数字 # 处理连续特征 scaler = StandardScaler() # 创建StandardScaler对象 data['feature1'] = scaler.fit_transform(data[['feature1']]) # 对连续特征进行标准化 # 特征选择 selected_features = ['feature1', 'feature2', 'feature3'] # 选择要保留的特征列 data = data[selected_features] # 清洗异常值 data = data[(data['feature1'] > 0) & (data['feature1'] < 1)] # 删除feature1超出指定范围的行 # 保存处理后的数据 data.to_csv('processed_data.csv', index=False) ``` 这个例子展示了如何使用Python进行数据预处理。首先,使用`pandas`库读取数据,并对缺失值进行处理,可以选择删除包含缺失值的行或将缺失值替换为特定的值。然后,使用`sklearn.preprocessing`库中的`LabelEncoder`和`StandardScaler`对离散特征和连续特征进行处理。接下来,可以选择保留感兴趣的特征列,或者删除一些异常值。最后,使用`to_csv`方法将处理后的数据保存到一个新的CSV文件中。 ### 回答3: 数据预处理是指在进行数据分析或建模前对原始数据进行清洗、转换和整理的过程。Python是一种简单易学、功能强大的编程语言,它为数据预处理提供了丰富的库和工具。 以下是用Python进行数据预处理的一些常用代码: 1. 导入所需库: ```python import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler ``` 2. 读取数据: ```python data = pd.read_csv("data.csv") ``` 3. 数据清洗: ```python # 查看数据概览 print(data.head()) # 处理缺失值 data.dropna() # 删除缺失值所在的行 data.fillna(value) # 用指定值填充缺失值 # 处理重复值 data.drop_duplicates() # 删除重复值所在的行 # 处理异常值 data[(np.abs(data['列名']-data['列名'].mean()) <= (3*data['列名'].std()))] # 删除异常值所在的行 ``` 4. 数据转换: ```python # 日期转换 data['日期列名'] = pd.to_datetime(data['日期列名']) # 类别型数据编码 data_encoded = pd.get_dummies(data, columns=['列名']) ``` 5. 特征缩放: ```python scaler = StandardScaler() # 创建缩放器对象 data_scaled = scaler.fit_transform(data) # 对数据进行缩放处理 ``` 6. 数据整理: ```python # 选择特定列 selected_data = data[['列名1', '列名2']] # 合并数据 merged_data = pd.concat([data1, data2], axis=1) ``` 以上是一些常见的数据预处理代码,根据实际需求可以进行相应的调整和扩展。数据预处理的目标是使数据具备可用性,提高数据分析和建模的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值