数据预处理

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

data = pd.read_csv(data_file)
print(data)

data = data.drop(columns=data.columns[[i for i,x in enumerate(list(data.isnull().sum())) if x==max(list(data.isnull().sum()))]])

data.iloc[:,0] = data.iloc[:,0].fillna(data.iloc[:,0].mean())

import numpy as np
import tensorflow as tf
tf.constant(np.array(data))

如下是我的作业,请指正,谢谢。在jupyter py3.8下运行 :grinning:

pandas的新版本参数变动很大,但凡你直接复制代码还报错,或者显示的数据类型于教材不符,优先考虑是pandas的问题。建议学的时候网页开着pandas的说明书

运行所给代码进行数值列缺失值补全平均值的时候,会报错不能让str和int相加,我通过找出所有数值列可以解决这个问题,要将数值列和非数值列分开处理,下面是我的代码`data = pd.read_csv(data_file)

#替换所有的数值列的缺失值为该列平均值

data = data.apply(pd.to_numeric, errors=‘ignore’)

numerical_columns = data.select_dtypes(include=‘number’).columns

data[numerical_columns] = data[numerical_columns].fillna(data[numerical_columns].mean())
`

import os
import pandas as pd

os.makedirs(os.path.join(os.getcwd(), ‘testproject’), exist_ok=True)
data_file=os.path.join(os.getcwd(), ‘testproject’, ‘data.csv’)

with open(data_file, ‘w’, newline=‘’) as f:
f.write(‘NumRooms,Alley,Price,NODATA\n’) # 列名
f.write(‘NA,Pave,127500,NA\n’) # 每行表示一个数据样本
f.write(‘2,NA,106000,NA\n’)
f.write(‘4,NA,178100,NA\n’)
f.write(‘NA,Pave,160000,NA\n’)
f.write(‘1,NA,110000,NA\n’)
f.write(‘NA,NA,180000,NA\n’)

data = pd.read_csv(data_file)

#替换所有的数值列的缺失值为该列平均值

data = data.apply(pd.to_numeric, errors=‘ignore’)

numerical_columns = data.select_dtypes(include=‘number’).columns

data[numerical_columns] = data[numerical_columns].fillna(data[numerical_columns].mean())

print(data)
print(‘\n’)

data = pd.get_dummies(data, dummy_na=True)

print(data)
print(‘\n’)

data = data.drop(columns=‘NODATA’)

print(data)
print(‘\n’)
#这是我的完整作业

2.2.2. 处理缺失值

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)

运行此段代码时

inputs = inputs.fillna(inputs.mean())

这一行抛出了如下错误
TypeError: can only concatenate str (not “int”) to str

而英文版此处的代码则可以顺利运行

inputs, targets = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
  1. 删除缺失值最多的列。

计算每一列的缺失值数量

missing_values_count = data.isna().sum()

找出缺失值最多的列

col_with_most_missing = missing_values_count.idxmax()

删除缺失值最多的列

df = data.drop(columns=[col_with_most_missing])

为什么这里提示can only concatenate str (not “int”) to str


最终不是0/1表示,而是bool类型,如何不报错

1 Like
inputs, outputs = data.iloc[:, 0:1], data.iloc[:, 2]

inputs = inputs.fillna(inputs.mean())

inputs = pd.concat([inputs, data.iloc[:, 1].reset_index(drop=True)], axis=1)

print(inputs)

是的,他好像不能处理字符类型,所以可以先处理整型,然后再拼接上即可。