pandas dataframe 中的explode函数用法详解
在使用pandas进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于hivesql中的explode函数。
这个函数如下:
Code
#!/usr/bin/envpython #-*-coding:utf-8-*- #createon18/4/13 importpandasaspd defdataframe_explode(dataframe,fieldname): temp_fieldname=fieldname+'_made_tuple_' dataframe[temp_fieldname]=dataframe[fieldname].apply(tuple) list_of_dataframes=[] forvaluesindataframe[temp_fieldname].unique().tolist(): list_of_dataframes.append(pd.DataFrame({ temp_fieldname:[values]*len(values), fieldname:list(values), })) dataframe=dataframe[list(set(dataframe.columns)-set([fieldname]))].merge(pd.concat(list_of_dataframes),how='left',on=temp_fieldname) deldataframe[temp_fieldname] returndataframe df=pd.DataFrame({'listcol':[[1,2,3],[4,5,6]],"aa":[222,333]}) df=dataframe_explode(df,"listcol")
Description
将dataframe按照某一指定列进行展开,使得原来的每一行展开成一行或多行。(注:该列可迭代,例如list,tuple,set)
补充知识:Pandas列中的字典/列表拆分为单独的列
我就废话不多说了,大家还是直接看代码吧
[1]df StationIDPollutants 8809{"a":"46","b":"3","c":"12"} 8810{"a":"36","b":"5","c":"8"} 8811{"b":"2","c":"7"} 8812{"c":"11"} 8813{"a":"82","c":"15"}
Method1:
step1:convertthePollutantscolumntoPandasdataframeseries
df_pol_ps=data_df['Pollutants'].apply(pd.Series) df_pol_ps: abc 046312 13658 2NaN27 3NaNNaN11 482NaN15
step2:concatcolumnsa,b,canddrop/removethePollutants
df_final=pd.concat([df,df_pol_ps],axis=1).drop('Pollutants',axis=1) df_final: StationIDabc 0880946312 188103658 28811NaN27 38812NaNNaN11 4881382NaN15
Method2:
df_final=pd.concat([df,df['Pollutants'].apply(pd.Series)],axis=1).drop('Pollutants',axis=1) df_final: StationIDabc 0880946312 188103658 28811NaN27 38812NaNNaN11 4881382NaN15
以上这篇pandasdataframe中的explode函数用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。