菜鸟的学习笔记
敲代码过程中遇到的许许多多的小问题。
PART1 数据处理
一、将两列拼接,即1和1变成11。( 参考了这里python合并两列)
- 首先读数据:
df = pd.read_csv("data.csv")
- 其次将要拼接的两列转化为字符串格式,很重要!
- 怎么转化呢,用
.map(str)
,举例子:df['num'] = df['num1'].map(str)+df['num2'].map(str)
二、将某列符合条件的值改为另一个值
- 先用了这个方法:
df.loc[df['Outcome'] == 'True'] = 1
,想把列的True改为1,但是这个方法使得该行所有值都变为了1; - 后来发现是少加了一个参数,应该是:
df.loc[df['Outcome'] == 'True','Outcome'] = 1
,第二个参数表示对哪一列进行操作,这样就可以只改变目标列了
三、用一个csv文件的值填补另一个csv文件中的空缺位置
- 未解决,最后利用指针和数组达成了目标,过程很繁琐
四、删除nan
- 假设x为数组,则用到
x=x[~np.isnan(x)]
; - 假设y是dataframe,则使用
df = df[~df["列名"].isnull()]
; - 填充dataframe中的null,使用
df['列名'].fillna('要填充的数', inplace=True)
,inplace=True
表示直接对df进行操作,不产生新的对象 - 若删除数组中的空格,则用到
while ' ' in 数组名:数组名.remove(' ')
- 删除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)
- 在dataframe中,使用
df["列名"] = np.unique(df["列名"].map(str), return_inverse=True)[1]
,注意:这种编码方式会将null值也编码进去。 - 用set()函数时出现错误,我的代码是
skill_set = set(df['skill_id'])
,希望出现的结果是所有技能id的无重复集合,但是运行出来的结果是:
可以看到出现了大量的nan,解决方法:加一个.astype(str)控制,即skill_set = set(df['skill_id'].astype(str))
,再运行结果为:
搜索只有一个nan值,是正确的。
PART2 代码报错
-
RuntimeError: index out of range at c:\a\w\1\s\windows\pytorch\aten\src\th\generic/THTensorEvenMoreMath.cpp:191
答:索引越界了,检查一下自己的数组下标,使其从1开始。 -
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维之外的维度大小都相同。 -
ValueError: invalid literal for int() with base 10: ‘356.0’
答:int()不能转换带小数点的字符串,可以将int('356.0')
改为round(float("356.0"))
。