pandas dataframe 中的explode函數(shù)用法詳解
在使用 pandas 進(jìn)行數(shù)據(jù)分析的過(guò)程中,我們常常會(huì)遇到將一行數(shù)據(jù)展開成多行的需求,多么希望能有一個(gè)類似于 hive sql 中的 explode 函數(shù)。
這個(gè)函數(shù)如下:
Code
# !/usr/bin/env python # -*- coding:utf-8 -*- # create on 18/4/13 import pandas as pd def dataframe_explode(dataframe, fieldname): temp_fieldname = fieldname + '_made_tuple_' dataframe[temp_fieldname] = dataframe[fieldname].apply(tuple) list_of_dataframes = [] for values in dataframe[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) del dataframe[temp_fieldname] return dataframe df = pd.DataFrame({'listcol':[[1,2,3],[4,5,6]], "aa": [222,333]}) df = dataframe_explode(df, "listcol")
Description
將 dataframe 按照某一指定列進(jìn)行展開,使得原來(lái)的每一行展開成一行或多行。( 注:該列可迭代, 例如list, tuple, set)
補(bǔ)充知識(shí):Pandas列中的字典/列表拆分為單獨(dú)的列
我就廢話不多說(shuō)了,大家還是直接看代碼吧
[1] df Station ID Pollutants 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"}
Method 1:
step 1: convert the Pollutants column to Pandas dataframe series
df_pol_ps = data_df['Pollutants'].apply(pd.Series) df_pol_ps: a b c 0 46 3 12 1 36 5 8 2 NaN 2 7 3 NaN NaN 11 4 82 NaN 15
step 2: concat columns a, b, c and drop/remove the Pollutants
df_final = pd.concat([df, df_pol_ps], axis = 1).drop('Pollutants', axis = 1) df_final: StationID a b c 0 8809 46 3 12 1 8810 36 5 8 2 8811 NaN 2 7 3 8812 NaN NaN 11 4 8813 82 NaN 15
Method 2:
df_final = pd.concat([df, df['Pollutants'].apply(pd.Series)], axis = 1).drop('Pollutants', axis = 1) df_final: StationID a b c 0 8809 46 3 12 1 8810 36 5 8 2 8811 NaN 2 7 3 8812 NaN NaN 11 4 8813 82 NaN 15
以上這篇pandas dataframe 中的explode函數(shù)用法詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Pytorch+PyG實(shí)現(xiàn)GraphSAGE過(guò)程示例詳解
這篇文章主要為大家介紹了Pytorch+PyG實(shí)現(xiàn)GraphSAGE過(guò)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Django使用裝飾器限制對(duì)視圖的訪問(wèn)及實(shí)現(xiàn)原理
除了可以在視圖處理中校驗(yàn)用戶身份以及驗(yàn)證用戶權(quán)限之外,Django還提供了便捷的裝飾器來(lái)完成這兩類校驗(yàn),下面介紹這兩個(gè)裝飾器的使用方法與實(shí)現(xiàn)原理,對(duì)Django裝飾器限制視圖訪問(wèn)相關(guān)知識(shí)感興趣的朋友一起看看吧2022-10-10django開發(fā)之settings.py中變量的全局引用詳解
當(dāng)網(wǎng)站里面的一些內(nèi)容,如郵箱,網(wǎng)站標(biāo)題,網(wǎng)站的描述,這些東西我們可以存在數(shù)據(jù)庫(kù)中也可以存放在我們的setting 文件中,這篇文章主要給大家介紹了django中settings.py變量的全局引用的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下。2017-03-03Python使用matplotlib繪制動(dòng)畫的方法
這篇文章主要介紹了Python使用matplotlib繪制動(dòng)畫的方法,涉及matplotlib模塊的常見(jiàn)使用技巧,需要的朋友可以參考下2015-05-05Django項(xiàng)目的初步創(chuàng)建與簡(jiǎn)單配置
本文主要介紹了Django項(xiàng)目的初步創(chuàng)建與簡(jiǎn)單配置,詳細(xì)介紹了如何安裝和配置Django,包括創(chuàng)建項(xiàng)目、數(shù)據(jù)庫(kù)配置、路由等,通過(guò)本文可以了解如何使用Django創(chuàng)建自己的Web應(yīng)用程序2023-09-09OpenCV模板匹配matchTemplate的實(shí)現(xiàn)
這篇文章主要介紹了OpenCV模板匹配matchTemplate的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Python的Pandas庫(kù)中使用DataFrame篩選和刪除含特定值的行與列
Pandas是一個(gè)強(qiáng)大的數(shù)據(jù)處理庫(kù),提供了各種功能來(lái)操作和處理數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于Python的Pandas庫(kù)中使用DataFrame篩選和刪除含特定值的行與列的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05Python3爬蟲中關(guān)于Ajax分析方法的總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于Python3爬蟲中關(guān)于Ajax分析方法的總結(jié),需要的朋友們可以學(xué)習(xí)下。2020-07-07