python数据处理----整理数据

python数据处理----整理数据,第1张

为什么要整理数据


对于这种“宽”数据,在展示方面来说没有什么问题,但是数据分析的时候我们需要“长”数据,这时候就需要整理数据整理成我们想要的样子。


melt( )函数

把字段拆分成数据

  • id_vars参数:保留哪个字段(可以保留多个字段
  • var_name参数:为其余转换的字段起别名
  • value_name参数:为值的那一列起别名
pew_long = pd.melt(pew,id_vars='religion',var_name='income',value_name='count')
print(pew_long)

保留多个列

# 保留除了冗余的字段外其他的字段
bill_long = bill_board.melt(id_vars=['year','artist','track','time','date.entered'],var_name="周期",value_name="周排行")

drop_duplicates( )函数

根据列名删除重复数据

根据歌手查看数据发现很多同一首歌相同的数据,这时候需要去除冗余数据:

bill_long.drop_duplicates(subset=['year','artist','track','time','date.entered'],keep='first',inplace=True)
  • subset参数:要进行去重的列名,默认None
  • keep可选参数:
    1. first保留第一次出现重复行,删除后面的重复
    2. last 删除重复项,保留最后一个重复的数据
    3. False 删除所有重复的数据
  • inplace参数: 布尔值,默认False,为True时直接修改原数据,False时修改完的数据返回一个副本

stack( )函数

原数据:


stack()方法整理数据

state_fruit_tidy = state_fruit.stack()

重置索引转换为DataFrame对象并修改列索引:

state_fruit_tidy = state_fruit.stack().reset_index()
state_fruit_tidy.columns = ['state', 'fruit', 'weight']


wide_to_long( )函数

原数据:

  • 从上面数据中可以看出,列名中包含了数字 1,2,3 如果想把这部分信息提取到列当中,可以使用wide_to_long函数
  • 使用wide_to_long函数时,要求 1,2,3 这样的顺序信息在列名的最后,并用分隔符隔开
  1. 使用自定义函数先整理数据为wide_to_lang()需要的数据格式:

    wide_to_lang()函数需要数据格式 列名\分隔符\数字

    #创建一个自定义函数,用来改变列名。将数字放到列名的最后
    def change_col_name(col_name):
    	# 每一次传入列表  把_name替换为空  前三个数据符合格式
        col_name = col_name.replace('_name', '')
        if 'facebook' in col_name:
        	# 处理后三个列名
            fb_idx = col_name.find('facebook')
            col_name = col_name[:5] + col_name[fb_idx - 1:] + col_name[5:fb_idx-1]
        return col_name
    actor2 = actor.rename(columns=change_col_name)
    actor2.head()
    

  1. 使用wide_to_lang()函数
  • stubnames参数:提取以指定字符串开头的列(可传入字符串和列表
  • i参数:当作索引的列(可传入字符串和列表
  • j参数: 提取开头后剩余的部分,在此指定列名(传入字符串
  • sep参数: 指定分隔符 ,默认" "传入字符串
# 列名列表
stubs = ['actor', 'actor_facebook_likes']
actor2_tidy = pd.wide_to_long(actor2, 
                              stubnames=stubs, 
                              i=['movie_title'], 
                              j='actor_num', 
                              sep='_').reset_index()
print(actor2_tidy)


小结
方法特点
melt指定数据列,将指定的列变成长数据
stack返回一个具有多层级索引的数据,配合reset_index()重置索引可实现宽数据变成长数据
wide_to_lang处理列名带数字后缀的宽数据

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/787286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存