python数据处理----整理数据
为什么要整理数据

对于这种“宽”数据,在展示方面来说没有什么问题,但是数据分析的时候我们需要“长”数据,这时候就需要整理数据整理成我们想要的样子。
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参数:要进行去重的列名,默认Nonekeep可选参数:first保留第一次出现重复行,删除后面的重复last删除重复项,保留最后一个重复的数据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 这样的顺序信息在列名的最后,并用分隔符隔开
-
使用自定义函数先整理数据为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()

- 使用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 | 处理列名带数字后缀的宽数据 |
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
