在报错中学python something

这里写目录标题

    • 动手学深度学习pandas完整代码
    • 数据处理
      • TypeError: can only concatenate str (not "int") to str(fillna填补缺失值)
    • 创建文件夹
    • 学习这个数据分组
    • get_dummies实现one hot encode

动手学深度学习pandas完整代码

import os

import numpy as np
import pandas as pd
import torch
from numpy import nan as NaN

os.makedirs(os.path.join('..', 'data'), exist_ok=True)  # 在上级目录创建data文件夹
datafile = os.path.join('..', 'data', 'house_tiny.csv')  # 创建文件
with open(datafile, 'w') as f:  # 往文件中写数据
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')  # 第1行的值
    f.write('2,NA,106000\n')  # 第2行的值
    f.write('4,NA,178100\n')  # 第3行的值
    f.write('NA,NA,140000\n')  # 第4行的值

data = pd.read_csv(datafile)  # 可以看到原始表格中的空值NA被识别成了NaN
print('1.原始数据:\n', data)

inputs, outputs = data.iloc[:, 0: 2], data.iloc[:, 2]
# inputs = inputs.fillna(inputs.mean())  # 用均值填充NaN
# inputs = inputs.fillna(66)  # 用均值填充NaN
#在mean()括号里面加入numeric_only=Ture
inputs = inputs.fillna(inputs.mean(numeric_only=True))
print(inputs)
print(outputs)
# 利用pandas中的get_dummies函数来处理离散值或者类别值。
# [对于 inputs 中的类别值或离散值,我们将 “NaN” 视为一个类别。] 由于 “Alley”列只接受两种类型的类别值 “Pave” 和 “NaN”
inputs = pd.get_dummies(inputs, dummy_na=True)
print('2.利用pandas中的get_dummies函数处理:\n', inputs)

# x, y = torch.tensor(inputs.values), torch.tensor(outputs.values)报错!!!

x = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))
print('3.转换为张量:')
print(x)
print(y)

# 扩展填充函数fillna的用法
df1 = pd.DataFrame([[1, 2, 3], [NaN, NaN, 2], [NaN, NaN, NaN], [8, 8, NaN]])  # 创建初始数据
print('4.函数fillna的用法:')
print(df1)
print(df1.fillna(100))  # 用常数填充 ,默认不会修改原对象
print(df1.fillna({0: 10, 1: 20, 2: 30}))  # 通过字典填充不同的常数,默认不会修改原对象
print(df1.fillna(method='ffill'))  # 用前面的值来填充
# print(df1.fillna(0, inplace=True))  # inplace= True直接修改原对象

df2 = pd.DataFrame(np.random.randint(0, 10, (5, 5)))  # 随机创建一个5*5
df2.iloc[1:4, 3] = NaN
df2.iloc[2:4, 4] = NaN  # 指定的索引处插入值
print(df2)
print(df2.fillna(method='bfill', limit=2))  # 限制填充个数
print(df2.fillna(method="ffill", limit=1, axis=1))  #

数据处理

TypeError: can only concatenate str (not “int”) to str(fillna填补缺失值)

不能让字符串 和int 值 连接
这里报错不是简单的连接,是因为mean函数的,求mean的对象中有整数也有字符串

解决方法

#在mean()括号里面加入numeric_only=Ture
inputs = inputs.fillna(inputs.mean(numeric_only=True))
import os

import numpy as np
import pandas as pd
import torch
from numpy import nan as NaN

os.makedirs(os.path.join('..', 'data'), exist_ok=True)  # 在上级目录创建data文件夹
datafile = os.path.join('..', 'data', 'house_tiny.csv')  # 创建文件
with open(datafile, 'w') as f:  # 往文件中写数据
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')  # 第1行的值
    f.write('2,NA,106000\n')  # 第2行的值
    f.write('4,NA,178100\n')  # 第3行的值
    f.write('NA,NA,140000\n')  # 第4行的值

data = pd.read_csv(datafile)  # 可以看到原始表格中的空值NA被识别成了NaN
print('1.原始数据:\n', data)

inputs, outputs = data.iloc[:, 0: 2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())  # 用均值填充NaN
print(inputs)
print(outputs)

在报错中学python something_第1张图片

创建文件夹

在上级目录创建data文件夹,记得找到上级目录的data再删

os.makedirs(os.path.join('..', 'data'), exist_ok=True)  # 在上级目录创建data文件夹
datafile = os.path.join('..', 'data', 'house_tiny.csv')  # 创建文件

1.1 os.makedirs(path, mode=0o777) 方法:用于递归创建目录。

path – 需要递归创建的目录,可以是相对或者绝对路径。。
mode – 权限模式。
无返回值
1.2 os.path.join()函数:连接两个或更多的路径名组件

  • 如果各组件名首字母不包含’/’,则函数会自动加上
  • 如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
  • 如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾

学习这个数据分组

get_dummies实现one hot encode

get_dummies方法可以把把 离散的类别信息转化为onehot编码形式,
dummy_na=True意为是否把nan单独看做一个类别。

get_dummies
是利用pandas实现one hot encode的方式

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False) 

import pandas as pd
df = pd.DataFrame([  
            ['green' , 'A'],   
            ['red'   , 'B'],   
            ['blue'  , 'A']])  

df.columns = ['color',  'class'] 
pd.get_dummies(df) 

在报错中学python something_第2张图片
对每个类别的值都进行0-1编码

在报错中学python something_第3张图片
上述执行完以后再打印df 出来的还是get_dummies 前的图,因为你没有写,赋值

df = pd.get_dummies(df)

可以对指定列进行get_dummies

pd.get_dummies(df.color)

在报错中学python something_第4张图片
将指定列进行get_dummies 后合并到元数据中

df = df.join(pd.get_dummies(df.color))

在报错中学python something_第5张图片

你可能感兴趣的:(python,开发语言)