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函数用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。