生成如下的数据, 并存入文件
import os
os.makedirs(os.path.join('.', 'data'), exist_ok=True)
data_file = os.path.join('.', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
f.write('NumRooms,Alley,Price\n')
f.write('NA,Pave,127500\n')
f.write('2,NA,106000\n')
f.write('4,NA,178100\n')
f.write('NA,NA,140000\n')
从文件中读取刚才保存的数据, 并对缺失值进行处理, 代码如下
import pandas as pd
import os
data_file = os.path.join('.', 'data', 'house_tiny.csv')
data = pd.read_csv(data_file)
print(data)
inputs, outputs = data.iloc[:, 0:2], data.iloc[:,2]
inputs = inputs.fillna(inputs.mean())
print(inputs)
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
最初读取到的原始数据如下:
NumRooms Alley Price
0 NaN Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 NaN NaN 140000
可以看到其中的前两列存在缺失值, 下面将数据分为两部分, 数据分为输入数据和输出数据, 输入数据对应dataFrame的前两列数据, 输出数据对应第二列数据(从0列开始编码)
inputs, outputs = data.iloc[:, 0:2], data.iloc[:,2]
print(inputs)
NumRooms Alley
0 NaN Pave
1 2.0 NaN
2 4.0 NaN
3 NaN NaN
print(outputs)
0 127500
1 106000
2 178100
3 140000
对列NumRooms 采用插值的方式来处理缺失值。
>>> inputs = inputs.fillna(inputs.mean())
>>> print(inputs)
NumRooms Alley
0 3.0 Pave
1 2.0 NaN
2 4.0 NaN
3 3.0 NaN
列 Alley 仅包含离散值, 分为两种不同的类型 Pave 和 NaN, 利用pandas 自动将此列转换为两列:
>>> inputs = pd.get_dummies(inputs, dummy_na=True)
>>> print(inputs)
NumRooms Alley_Pave Alley_nan
0 3.0 1 0
1 2.0 0 1
2 4.0 0 1
3 3.0 0 1
到此, inputs中的缺失值全部补全了, 且转换为数值型了。