pandas修改DataFrame列名的实现方法
提出问题
存在一个名为dataset的DataFrame
>>>dataset.columns Index(['age','job','marital','education','default','housing','loan', 'contact','month','day_of_week','duration','campaign','pdays', 'previous','poutcome','emp.var.rate','cons.price.idx', 'cons.conf.idx','euribor3m','nr.employed','y'], dtype='object')
现在,我要将其columns名字改为:
>>>new_columns Index(['age_0','job_1','marital_2','education_3','default_4','housing_5', 'loan_6','contact_7','month_8','day_of_week_9','duration_10', 'campaign_11','pdays_12','previous_13','poutcome_14', 'emp.var.rate_15','cons.price.idx_16','cons.conf.idx_17', 'euribor3m_18','nr.employed_19','y_20'], dtype='object')
该如何操作?
解决
一.通过DataFrame.columns类的自身属性修改:
1.无脑赋值直接修改
>>>#先解决`new_columns`的推导问题 >>>#列表推导 >>>new_columns_list=[column_str+'_'+str(i)fori,column_strinenumerate(dataset.columns)] >>>#类型转换 >>>new_columns=pd.core.indexes.base.Index(new_columns_list) >>>dataset.columns=new_columns
2.通过.map(mapper,na_action=None)函数来修改
>>>#注:mapper多运用lambda表达式 >>>#但我似乎没有找到在lambda表达式中改变两个值的方法 >>>#所以只能蹩脚地用一个全局变量i,和映射函数mapper() >>>#希望大家能帮我找到方法 >>>i=0 >>>defmapper(x):#映射函数即mapper globali x+='_'+str(i) i+=1 returnx >>>dataset.columns.map(mapper)
3.参考博客用到了DataFrame.columns.str对象
用help(DataFrame.columns.str)翻遍了文档,
也没能找到可以被我拿来套用的方法,想着抽时间把这段文档翻译一下
二.通过DataFrame.rename()函数来修改
1.暴力字典法(好处:可以只修改特定的列)
>>>#此处先用字典推导法 >>>new_dict={ key:key+'_'+str(i) fori,keyinenumerate(dataset.columns) } >>>dataset.rename(columns=new_dict,inplace=True)
2.映射修改法
>>>#原博文依然用到了lambda表达式 >>>#我就再生搬硬套一次,把上面的复制过来 >>>#蹩脚地用一个全局变量i,和映射函数mapper() >>>i=0 >>>defmapper(x):#映射函数即mapper globali x+='_'+str(i) i+=1 returnx dataset.rename(columns=mapper,inplace=True)
稍微总结一下:字典推导和列表推导的使用方法很类似,最大的区别是选择中括号还是大括号
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。