apply(str)效率优于astype(str)、pivot中columns参数列重命名、df.rename、python引用传递和值传递
发现astype(str)的效率低于apply(str)
pivot命名有一个小技巧,pivot中的columns参数的列,比如是一些月份数字,这个时候可以
df['month'] = 'month_' + df['month'].apply(str),这样pivot后不用重命名直接可以merge,如果是有values的单column name情况,如果是双重column name,直接组合就好,但是作者这种方式有个缺陷就是训练集和测试集本身的groupby后columns参数字段的value个数不一致,这导致训练集和测试集有不同的字段个数,作者两个函数都涉及到这个问题
df.rename(map, axis='columns',inplace=True),map是字典,旧字段名到新字段名的映射,axis是对列名进行操作,axis=1也可以
python中函数的引用传递和值传递,程序员是不能指定的,python的类都是引用传递,所以我遇到了在另外一个函数中全局的df生成的字段在另一个函数中直接引用,我找了半天这个字段的出处,其实这种结构不是很易于理解和维护,这个字段应该在外部生成比较好,而不应该在封装到另外一个功能的函数中,作为一个中间过程生成的变量
关于引用传递和值传递,再强调一下,函数如果收到是一个可变对象的引用,就能修改原来的值,如果是一个不可变对象(数字、字符串、元组)的引用,就不能修改原始对象,要修改可以声明global
a = a + 3 存在这种赋值的话相当于生成一个局部变量,如果没通过函数参数传递进来就报错,要不然只能显示申明 global a,但是如果是df添加列,list添加元素,可以不要形参直接引用global的df或list,但是不传参不好,相当于内部把名称写死了,没有复用的可能性了。
pivot命名有一个小技巧,pivot中的columns参数的列,比如是一些月份数字,这个时候可以
df['month'] = 'month_' + df['month'].apply(str),这样pivot后不用重命名直接可以merge,如果是有values的单column name情况,如果是双重column name,直接组合就好,但是作者这种方式有个缺陷就是训练集和测试集本身的groupby后columns参数字段的value个数不一致,这导致训练集和测试集有不同的字段个数,作者两个函数都涉及到这个问题
df.rename(map, axis='columns',inplace=True),map是字典,旧字段名到新字段名的映射,axis是对列名进行操作,axis=1也可以
python中函数的引用传递和值传递,程序员是不能指定的,python的类都是引用传递,所以我遇到了在另外一个函数中全局的df生成的字段在另一个函数中直接引用,我找了半天这个字段的出处,其实这种结构不是很易于理解和维护,这个字段应该在外部生成比较好,而不应该在封装到另外一个功能的函数中,作为一个中间过程生成的变量
关于引用传递和值传递,再强调一下,函数如果收到是一个可变对象的引用,就能修改原来的值,如果是一个不可变对象(数字、字符串、元组)的引用,就不能修改原始对象,要修改可以声明global
a = a + 3 存在这种赋值的话相当于生成一个局部变量,如果没通过函数参数传递进来就报错,要不然只能显示申明 global a,但是如果是df添加列,list添加元素,可以不要形参直接引用global的df或list,但是不传参不好,相当于内部把名称写死了,没有复用的可能性了。
留言
張貼留言