赞
踩
目录
数据预处理是数据分析和机器学习过程中至关重要的一步。它涉及到对原始数据进行清洗、转换和规范化,以便于后续的建模和分析。以下是数据预处理的一些常见步骤以及对应的代码解释:
- import pandas as pd
- import numpy as np
这里我们导入了两个常用的库,Pandas 和 NumPy。Pandas 用于数据处理和分析,而 NumPy 用于数值计算。
- # 读取 CSV 文件
- data = pd.read_csv('data.csv')
- # 读取文本数据
- text_data = '''
- column1,column2,column3
- value1,value2,value3
- value4,value5,value6
- '''
-
- # 将文本数据转换为 DataFrame
- data = pd.read_csv(text_data, sep=',', engine='python')
- # 读取 Excel 文件
- data = pd.read_excel('data.xlsx', engine='openpyxl')
- ##Pycharm中
- print(data.head())
-
- ##Jupyter中
- data.head()
-
- ##也可以使用
- data.info()
data.head()
函数会返回 DataFrame 的前 5 行数据。print()
函数用于将结果输出到控制台。
type(data)
data['column'] = data['column'].astype('int')
使用
astype()
函数将 DataFrame 中的column
列转换为整数类型。
- # 创建一个示例 DataFrame
- data = pd.DataFrame({
- 'column1': [1, 2, 3, 4],
- 'column2': ['A', 'B', 'C', 'D'],
- 'column3': [1.1, 2.2, 3.3, 4.4]
- })
-
- # 查看 DataFrame 的数据类型
- print(data.dtype)
要将不是 DataFrame 的数据转换为 DataFrame,可以使用 Pandas 中的 pd.DataFrame()
函数。
- # 创建一个列表
- data_list = [
- [1, 'A', 1.1],
- [2, 'B', 2.2],
- [3, 'C', 3.3],
- [4, 'D', 4.4]
- ]
-
- # 将列表转换为 DataFrame
- data_df = pd.DataFrame(data_list)
如果要将不是 DataFrame 的数据(如字典、列表等)转换为 DataFrame,可以先将其转换为列表,然后再使用 pd.DataFrame()
函数进行转换
- # 创建一个字典
- data_dict = {
- 'col1': [1, 2, 3, 4],
- 'col2': ['A', 'B', 'C', 'D'],
- 'col3': [1.1, 2.2, 3.3, 4.4]
- }
-
- # 将字典转换为列表
- data_list = data_dict.values()
-
- # 将列表转换为 DataFrame
- data_df = pd.DataFrame(data_list)
data.fillna(value=0, inplace=True)
fillna()
函数用于填充 DataFrame 中的缺失值。这里我们使用value
参数设置填充值为 0,并使用inplace=True
参数直接修改原始 DataFrame。
data = data[(data['column1'] >= min_value) & (data['column1'] <= max_value)]
使用布尔索引来筛选 DataFrame 中的行,只保留满足条件的数据。
&
符号表示逻辑与操作,用于确保column1
的值在指定范围内。
- # 处理离群值
- def std_data(train, i): # data为数据集,i为列名,便于循环
- #计算标准差
- std = train[i].std()
- col = []
- for item in train[i]:
- if item < 3 * std or item > - 3 * std:
- col.append(item)
- if item > 3 * std:
- item = 3 * std
- col.append(item)
- else:
- item = -3 * std
- col.append(item)
- new_col = pd.DataFrame(col)
- train[i] = new_col
- return train
-
- for i in list(train.columns):
- df= std_data(train, i) # 离群值处理
- sns.boxplot(data=df,orient='h',palette='Set2')
- plt.show()
data['column'] = data['column'].apply(lambda x: x if x < 100 else np.nan)
使用
apply()
函数对名为column
的列进行操作。apply()
函数会作用于每一行数据。我们使用 lambda 函数来检查每一行的值是否小于 100,如果是,则保留原值;否则,替换为 NaN(Not a Number,即缺失值)。
data = data.drop_duplicates()
drop_duplicates()
函数会删除 DataFrame 中的重复行。
data['column'] = (data['column'] - min_value) / (max_value - min_value)
使用 lambda 函数对 DataFrame 中的
column
列进行归一化处理。
- from sklearn.preprocessing import MinMaxScaler
- def normalize_columns(df2, columns):
- # 进行规范化
- scaler = MinMaxScaler()
- for col in columns:
- if df2[col].dtype != 'object':
- # 从 DataFrame 中提取出该列,并将其转换为二维数组
- col_data = df2[[col]].values
- # 调用 MinMaxScaler 对象的 fit_transform() 方法进行规范化
- normalized_data = scaler.fit_transform(col_data)
- # 将规范化后的数组转换回一维,并将其添加回 DataFrame 中
- df2[col] = normalized_data.flatten()
- return df2
-
- # 2.2 数值型数据标准化
- df3 = normalize_columns(df2, numerical_columns)
- df3.head()
data_merged = pd.concat([data1, data2])
使用 Pandas 的
concat()
函数将两个 DataFrame(data1
和data2
)整合为一个 DataFrame。
data_summary = data.describe()
这里我们使用 Pandas 的
describe()
函数来计算 DataFrame 的摘要统计信息,如均值、标准差、最小值、最大值等。
通过以上步骤,我们可以完成数据预处理过程。需要注意的是,预处理过程可能会根据实际需求进行调整。在实际操作中,我们需要灵活运用各种方法来处理数据。
对于连续型数据和非连续型数据的填充,有一些常用的方法可以参考:
连续型数据是指在某个区间内可以取任意值的变量,例如身高、体重、年龄等。对于连续型数据的填充,可以考虑以下方法:
非连续型数据是指只能取有限个值的变量,例如性别、民族、血型等。对于非连续型数据的填充,可以考虑以下方法:
需要注意的是,对于非连续型数据的填充,要确保填充后的数据依然具有合理的逻辑性和一致性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。