添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

inputs = data.iloc[:,:-1]
col_name = inputs.isna().sum().idxmax()
inputs = inputs.drop(columns=col_name)
torch.tensor(inputs.values)

max_col_name = '' for col_name in lst: count = data[col_name].isnull().sum() # 对应每一列中 nan 的数量 if count > max_count: max_count = count max_col_name = col_name print(max_col_name) data.drop(max_col_name, axis=1, inplace=True) print(data) if __name__ == "__main__": data = pd.read_csv(data_file) drop_col(data) data = [[3,'NAN','NAN','NAN'],[11,22,33,'NAN'],[44,55,'NAN','NAN']] mult = pd.DataFrame(data) #DataFrame是一个表格类型的数据结构 #把不同的列表(或者是pandas库里头的Seise并成一个表格 print(mult) boolmult = mult.isnull() #这里为了直观可以构建一个布尔类型的DataFrame print(boolmult) missing_value = ['NAN'] mult.to_csv('2.2work.csv') df = pd.read_csv('2.2word.csv' , na_values = missing_value) #缺省值标记我们的特有的标签 new_df = df.dropna(axis = 1 , thresh = df.isnull().sum().max() ) #thresh标签的意思是,达到多少个缺省值我们才删除这个列(行) #axis = 0 是删除行 反之则是删除列 i = new_df.iloc[:,0:2] o = new_df.iloc[:,2] #用iloc方法取单独的列 i 取前两列,o取第三列 x = torch.tensor(i.values) , y = torch.tensor(o.values) #最后转化为张量 data.drop(data.isna().sum().idxmax(),axis=1)

用到的参数名及意义:
drop(labels,axis),labels表示行列名,axis,0表示行,1表示列
data.isna().sum(),列值和,这里返回series对象,其中series中的值为每列的和
idxmax()返回series中值最大的标签名,也就是列名。

创建一个csv文件

os.makedirs(os.path.join("…",“data”),exist_ok= True)
data_file = os.path.join("…",“data”,“pandas_file.csv”)
with open(data_file,‘w’) as f:
f.write(‘A,B,C,D,Result\n’)
f.write(‘1,2,NA,NA,1\n’)
f.write(‘7,2,NA,P,1\n’)
f.write(‘3,9,3,P,1\n’)
f.write(‘2,9,NA,NA,1\n’)

data = pd.read_csv(data_file)

定义一个删除最多空值的列函数

def deleteColumnMostNA(data):
max_index = max_count = -1
column = []
for i in range(data.shape[1]):
column.append(data.columns[i])

获取columns的信息 打印出data的column信息
for i in range(len(column)):
    print(column[i])
计算出列的空信息的数量
for i in range(len(column)):
    if data.isna().sum()[column[i]] > max_count:
        max_index = i
        max_count = data.isna().sum()[column[i]]
if max_index == -1:
    return None
return data.drop(column[max_index],axis=1)

data1 = deleteColumnMostNA(data)
inputs,outputs = data1.iloc[:,0:data1.shape[1]-1],data1.iloc[:,data1.shape[1]-1]
inputs = pd.get_dummies(inputs,dummy_na=True)

转化为tensor

X,y = torch.tensor(inputs.values),torch.tensor(outputs.values)

  • axis 参数指定了要删除哪个维度上包含缺失值的行或列。当 axis=0 时表示按照行进行操作,即删除包含缺失值的整行;而当 axis=1 时表示按照列进行操作,即删除包含缺失值的整列。
  • thresh 参数是一个阈值,它用来控制最多允许有多少个缺失值。如果某一行或列中的缺失值数量超过了这个阈值,则该行或列会被删除。注意,这里的缺失值数量是指在该行或列中有多少个缺失值,而不是在整个数据框中有多少个缺失值。
    inputs.isna() 是 Pandas 数据框的一个方法,用来检查数据框中的每个元素是否为缺失值(NaN)。
  • inputs.isna().sum() 将返回一个新的数据框,其中包含了 inputs 数据框中每一列中缺失值的数量。具体而言,它的作用是:

  • inputs 调用 isna() 方法,得到一个布尔型的数据框,其中每个元素表示该位置上是否为缺失值。
  • 对该数据框调用 sum() 方法,对每一列求和,得到一个新的数据框,其中每一列的值表示原数据框中该列中缺失值的数量。
  • data = pd.read_csv(data_file)
    nan_count = data.isna().sum()
    #利用pandas的dataFrame的bool索引,提取对应的行名称,即Alley,并删除该列,即anxis=1
    print(data)
    data.drop(nan_count[nan_count == max(nan_count)].index, axis=1, inplace=True)
    print(data)

    def read_my_data_mode(rand_line_count):
        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('index,number,asc,value')  # 列名
            for i in range(rand_line_count):
                f.write("\n"
                        + str('NaN' if 0 == random.randint(1, 1000) % 2 else torch.randn(1, 1).item())
                        + str(",NaN" if 0 == random.randint(1, 1000) % 2 else ",wr" + random.randint(48, 97).__str__())
                        + str(",NaN" if 0 == random.randint(1, 1000) % 2 else ",bn" + random.randint(48, 97).__str__())
                        + f",{torch.randn(1, 1).item() * 1000}"
        print(os.path.abspath(data_file))
    def work(filename):
        :param filename 文件地址
        # todo 删除缺失值最多的列。
        data = pd.read_csv(filename)
        print(data)
        print()
        # 查找每列中的 NaN 值数量
        nan_counts = pd.isna(data).sum()
        # 找出 NaN 值最多的列
        max_nan_col = nan_counts.idxmax()
        # 删除方法
        data.drop(max_nan_col, axis=1, inplace=True)
        print(data)
        # todo 将预处理后的数据集转换为张量格式。
        inputs, outputs = data.iloc[:, :2], data.iloc[:, 2]
        inputs = inputs.fillna(inputs.mean())
        inputs = pd.get_dummies(inputs, dummy_na=True)
        print(inputs)
        x, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
        print(x)
        print()
        print(y)
    if __name__ == '__main__':
        # print(random.randint(1, 1000))
        # read_my_data_mode(rand_line_count=8)
        # read_csv(filename='/root/deep-learning/ai/pytorch/data/house_tiny.csv')
        work(filename='/root/deep-learning/ai/pytorch/data/house_tiny.csv')
    
    # 原来的数据
          index number   asc        value
    0       NaN    NaN  bn93  1539.116383
    1 -0.156952   wr55   NaN    74.826859
    2       NaN    NaN  bn88 -1456.990361
    3       NaN    NaN  bn97 -1305.474758
    4  0.208486   wr77   NaN   420.621276
    5 -0.885964    NaN   NaN   513.052404
    6 -0.018206   wr85   NaN  -660.427392
    7       NaN    NaN   NaN   571.750224
    # 删除后的数据
          index   asc        value
    0       NaN  bn93  1539.116383
    1 -0.156952   NaN    74.826859
    2       NaN  bn88 -1456.990361
    3       NaN  bn97 -1305.474758
    4  0.208486   NaN   420.621276
    5 -0.885964   NaN   513.052404
    6 -0.018206   NaN  -660.427392
    7       NaN   NaN   571.750224
    # 处理缺失值
          index  asc_bn88  asc_bn93  asc_bn97  asc_nan
    0 -0.213159         0         1         0        0
    1 -0.156952         0         0         0        1
    2 -0.213159         1         0         0        0
    3 -0.213159         0         0         1        0
    4  0.208486         0         0         0        1
    5 -0.885964         0         0         0        1
    6 -0.018206         0         0         0        1
    7 -0.213159         0         0         0        1
    # 转换为张量格式
    # 输出x
    tensor([[-0.2132,  0.0000,  1.0000,  0.0000,  0.0000],
            [-0.1570,  0.0000,  0.0000,  0.0000,  1.0000],
            [-0.2132,  1.0000,  0.0000,  0.0000,  0.0000],
            [-0.2132,  0.0000,  0.0000,  1.0000,  0.0000],
            [ 0.2085,  0.0000,  0.0000,  0.0000,  1.0000],
            [-0.8860,  0.0000,  0.0000,  0.0000,  1.0000],
            [-0.0182,  0.0000,  0.0000,  0.0000,  1.0000],
            [-0.2132,  0.0000,  0.0000,  0.0000,  1.0000]], dtype=torch.float64)
    # 输出y
    tensor([ 1539.1164,    74.8269, -1456.9904, -1305.4748,   420.6213,   513.0524,
             -660.4274,   571.7502], dtype=torch.float64)
                  

    inputs = inputs.fillna(inputs.mean())
    亲爱的作者,我用python运行上面这一行代码之后,出现了 can only concatenate str (not “int“) to str的错误,我上网搜了一下,发现列表有一个字符串Pave导致无法求平均值,所以我认为这个得改成以下代码:
    inputs = inputs.fillna(inputs.select_dtypes(include=‘number’).mean())
    这样我认为可能会更不错。
    @goldpiggy

    inputs, outputs = data.iloc[:, 0:3], data.iloc[:, 3]

    missing_values_count = data.isnull().sum()

    max_missing_col = missing_values_count.idxmax()

    print(missing_values_count)

    print(max_missing_col)

    df = data.drop(max_missing_col, axis=1)

    print(df)
    import torch

    X, y = torch.tensor(df.iloc[:, 0:3].values),torch.tensor(outputs.values)

    交作业啦!