Motivation
和某个大佬采集的数据是csv格式的,之前没处理过csv格式的数据。拿来写神经网络训练的时候踩了不少坑,这里记录一下,也方便后来人学习。
Pandas处理csv文件
处理csv文件的包应该有不少,这里就做一个pandas的教程了(其他的没用过hhhh)。这里我以我的一个数据为例演示一些常用的处理方法。
文件读取
语句:origin_data = pd.read_csv("origin_data.csv", na_values=" NaN")
csv文件中的空值(NaN)是什么?这里是一个大坑。建议大家在读csv的时候用我下面这个参数,把缺失的值统一设置为"NaN"
。这样在后面如果需要手动过滤掉缺失值的时候可以索引到位置。之前试过,如果不设置这个参数,缺失值不是False、0、"NaN"中的任何一个。结果:
dataframe索引某一列
pandas读进来的csv数据会被封装成一个叫dataframe的格式,这种格式可以转为numpy数组。我们先来看如何操作dataframe。
语句:使用data.name
来根据标签索引某一列。
origin_data.Height
结果:
删除某一列
语句:del
关键字加标签删除某一列del origin_data["Weight change"]
结果:可以看到"Weight change"一列已经被删除
删除缺失值所在的行/列
对于缺失值,一般来说可以采用插值的办法补全或直接丢弃该条数据。这里以删除NaN值所在的行为例做演示。
语句:.dropna()
方法,默认删除有NaN值的行。可以设置.dropna(axis=1)
删除有NaN值的列。其他用法可以自行查阅。这个用法是最常用的。
origin_data = origin_data.dropna()
结果:可以看到行变少了,没有NaN值了。
修改索引
在对数据做了一些处理之后,数据的索引很有可能就直接乱掉了。比如这里:我们删掉了一些行,所以索引就是不连续的了。这时候如果我们按照索引去遍历数据就会报错。因此一般在数据处理完后都要重置一下索引。
语句:这里重点说一下drop
参数。drop参数为True表示直接丢掉索引列不要了,然后重置顺序。drop参数为False表示重置索引,并保留索引列。
origin_data = origin_data.reset_index(drop=True)
结果:
按条件修改值
我们在做数据预处理的时候,需要把一些非数字的值转为数字。比如性别、省市等。这里以性别为例,我希望把M/F转化为0/1,以便神经网络来处理。
语句:.loc[row, flag]
获取需要索引的数据,而后通过条件判断来修改值
for i in range(len(origin_data)):origin_data.loc[i, 'Sex'] = 1 if origin_data.loc[i, 'Sex'] == "F" else 0
结果:这里我改了两列的数据,结果如图所示