数据预处理常常占用深度学习中很大的一部分,且处理起来费时费力,本文旨在分享常用的一些方法,非常适合小白学习。代码包含import,均测试运行过,可直接食用~
为了方便大家理解处理过程,代码使用机械硬盘数据,包含两个csv文件,每个csv文件中包含多个特征,每个特征分为原始特征和正则化特征两种。
链接:https://pan.baidu.com/s/1IkNnW5XuFfsYOwZ0-yCgOg
提取码:disk
目录
csv文件
使用os中的listdir方法返回包含所有文件名的列表,再使用join结合判断是否是文件的方法合成完整csv文件名列表
import os
def files_path(rootpath):
path_list = []
if os.path.exists(rootpath):
dirs = os.listdir(rootpath)#用于返回指定的文件夹包含的文件、即包含的文件夹的名字的列表
dirs.sort()#作排序
for dir in dirs:
parent_path = os.path.join(rootpath, dir)#返回rootpath\dir1....or rootpath\dir2....等等
if not os.path.isdir(parent_path):#判断对象是否为一个文件,若不是文件
path_list.append(parent_path)
return path_list#返回所有csv文件的位置列表
if __name__ == "__main__":
print(files_path('dataset'))
使用pandas中的read_csv方法
import pandas as pd
df = pd.read_csv('data/data_Q1_2019/2019-01-01.csv')#读取单个csv文件
print(df)
DataFrame数据处理方法
从csv文件中读取的数据即为DataFrame类型。
这里取的是failure列(待预测特征)和其他关键特征
import pandas as pd
df = pd.read_csv('data/data_Q1_2019/2019-01-01.csv')
columns_specified = []
features = [1, 7, 9, 190, 193, 194, 240, 241, 242]
for feature in features:
columns_specified += ["smart_{0}_raw".format(feature)] # 取关键特征列到列表中
columns_specified = ["failure"] + columns_specified
data = data[columns_specified]
data = data.iloc[:int(0.8 * data.shape[0]), :] # 取全部列,和80%的行作为训练集
data = data.iloc[int(0.8*data.shape[0]):,:]#选取后20%的行作为测试集
使用pandas中concat方法
import pandas as pd
df = pd.read_csv('data/data_Q1_2019/2019-01-01.csv')#读取单个csv文件
data1 = df[df['serial_number'] == 'ZJV0XJQ4']
print(data1)
sample_data = pd.DataFrame(columns=["serial_number"])#这里把columns设置为你想要的特征,建议设置与data1的列特征相同
sample_data = pd.concat([sample_data, data1], axis=0, join='outer', sort=False)
print(sample_data)
使用DataFrame对应的values方法
import pandas as pd
df = pd.read_csv('data/data_Q1_2019/2019-01-01.csv')#读取单个csv文件
sample_data = df
print(type(df))
print(type(sample_data))
print(type(sample_data['date']))
print(sample_data['date'].values[0])#取列 为“date”的第1行的值
print(sample_data['date'].values[3])#取列 为“date”的第4行的值
结果:
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>
2019-01-01
2019-01-01
我们所知道的values方法一般用于列表,那么series(序列)和list(列表)有什么区别呢?
列表
使用split方法将data/data_Q1_2019\2019-03-01.csv以“\”分隔为列表[data/data_Q1_2019,2019-03-01.csv],下面用到\为了转义。
import os
import re
#以上写过的获取文件包含的csv文件列表方法
def files_path(rootpath):
path_list = []
if os.path.exists(rootpath):
dirs = os.listdir(rootpath)#用于返回指定的文件夹包含的文件、即包含的文件夹的名字的列表
dirs.sort()#作排序
for dir in dirs:
parent_path = os.path.join(rootpath, dir)#返回rootpath\dir1....or rootpath\dir2....等等
if not os.path.isdir(parent_path):#判断对象是否为一个文件,若不是文件
path_list.append(parent_path)
return path_list#返回所有csv文件的位置列表
if __name__ == "__main__":
print(files_path('dataset'))
path_list = files_path('data/data_Q1_2019')
for path in path_list:
t = re.split(r'\\', path) # 对file_path中的元素进行分割
print(type(t))
print("t[-1] = \n")
print(t[-1])
持续更新…