菜鸟的学习笔记

这篇博客记录了数据处理的一些技巧,包括如何拼接数据列、修改特定条件的值、处理缺失值以及编码问题。同时,也提到了在代码执行过程中遇到的RuntimeError和ValueError等错误,给出了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


敲代码过程中遇到的许许多多的小问题。

PART1 数据处理

一、将两列拼接,即1和1变成11。( 参考了这里python合并两列)

  1. 首先读数据:df = pd.read_csv("data.csv")
  2. 其次将要拼接的两列转化为字符串格式,很重要!
  3. 怎么转化呢,用.map(str),举例子:df['num'] = df['num1'].map(str)+df['num2'].map(str)

二、将某列符合条件的值改为另一个值

  1. 先用了这个方法:df.loc[df['Outcome'] == 'True'] = 1,想把列的True改为1,但是这个方法使得该行所有值都变为了1;
  2. 后来发现是少加了一个参数,应该是:df.loc[df['Outcome'] == 'True','Outcome'] = 1,第二个参数表示对哪一列进行操作,这样就可以只改变目标列了

三、用一个csv文件的值填补另一个csv文件中的空缺位置

  • 未解决,最后利用指针和数组达成了目标,过程很繁琐

四、删除nan

  1. 假设x为数组,则用到x=x[~np.isnan(x)]
  2. 假设y是dataframe,则使用df = df[~df["列名"].isnull()]
  3. 填充dataframe中的null,使用df['列名'].fillna('要填充的数', inplace=True)inplace=True表示直接对df进行操作,不产生新的对象
  4. 若删除数组中的空格,则用到while ' ' in 数组名:数组名.remove(' ')
  5. 删除list中的nan,用这个list1 = [i for i in list1 if i == i],参考: python删除列表中的nan值.

五、将一列不连续的数值重新连续编码,如(1,3,3,5,3,6)编码为(1,2,2,3,2,4)

  1. 在dataframe中,使用df["列名"] = np.unique(df["列名"].map(str), return_inverse=True)[1]注意:这种编码方式会将null值也编码进去。
  2. 用set()函数时出现错误,我的代码是skill_set = set(df['skill_id']),希望出现的结果是所有技能id的无重复集合,但是运行出来的结果是:在这里插入图片描述
    可以看到出现了大量的nan,解决方法:加一个.astype(str)控制,即skill_set = set(df['skill_id'].astype(str)),再运行结果为:在这里插入图片描述在这里插入图片描述
    搜索只有一个nan值,是正确的。

PART2 代码报错

  1. RuntimeError: index out of range at c:\a\w\1\s\windows\pytorch\aten\src\th\generic/THTensorEvenMoreMath.cpp:191
    答:索引越界了,检查一下自己的数组下标,使其从1开始。

  2. The size of tensor a (4) must match the size of tensor b (2) at non-singleton dimension 0
    答:张量拼接时没注意维度的统一。torch.cat((a,b),0)表示在第0维拼接(横向扩展),例如a.size()=[32,680,129],b.size()=[48,680,129],此时只有第0维不同,其他维大小都相同,可以横向拼接,拼接后的形状为[80,680,129];同理,torch.cat((a,b),1)表示在第1维拼接(纵向扩展),需要保证除了第1维不同外,其他维的大小都一样;另外,也可以在更高维上拼接,如torch.cat((a,b),2)表示在第2维拼接,要保证除第2维之外的维度大小都相同。

  3. ValueError: invalid literal for int() with base 10: ‘356.0’
    答:int()不能转换带小数点的字符串,可以将int('356.0')改为round(float("356.0"))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值