拋棄你的Excel吧栈幸,5行Python代碼快速處理合并單元格

在日常處理數(shù)據(jù)的過程中,我們經(jīng)常遇到帶有合并單元格的excel文件帮辟,或者帶有空值的csv文件速址,使用excel打開后如下圖所示,但這對數(shù)據(jù)分析是很不友好的由驹,作為一個Data Analyst芍锚,看到這么糟心的數(shù)據(jù),怎么能忍蔓榄?趕緊掏出萬能的Pandas來tidy data!

帶有合并單元格的數(shù)據(jù)(示例

需求分析:想要根據(jù)哪一列的粒度整理數(shù)據(jù)并炮?

  1. 如果是class_id這一列,則整理后的結(jié)果將成為4行甥郑,同一個class_id下的student_list將會被合并到一個單元格內(nèi)逃魄,可以考慮使用,將不同的元素隔開
  2. 如果是student_list這一列,則整理后的結(jié)果將成為8行澜搅,有合并單元格的列將會被拆分開來伍俘,且在有空值的位置補上對應的正確的值

處理步驟

準備工作

  • 用到的庫:pandas
  • 用到的函數(shù):fillna(),groupby(),agg(),merge()

1.讀取數(shù)據(jù)

可以看到將數(shù)據(jù)讀取到DataFrame后,在有合并單元格的列中店展,將會有值為NaN的單元格出現(xiàn)

# 引入 pandas 庫
import pandas as pd
# 讀取樣例數(shù)據(jù)养篓,這里讀取的是 csv 數(shù)據(jù)
df = pd.read_csv("../data/test.csv")
測試數(shù)據(jù)

2.尋找主鍵列并為空值單元格填充數(shù)據(jù)

需要先找出一個沒有重復值且?guī)в泻喜卧?/strong>的組合列,也叫主鍵聯(lián)合主鍵赂蕴,通過以下代碼將只為空的單元格進行填充柳弄。本例以class_id列為例。

df['class_id'] = df['class_id'].fillna(method='ffill')

可以看到class_id這一列的空值已被填充概说,且產(chǎn)生了重復值碧注。

為主鍵填充空值

如果你是需求分析中的需求2,那么到這一步其實已經(jīng)接近最終結(jié)果了糖赔,你可以采用同樣的方法將其他兩列的空值進行填充萍丐,或者對多個列同時進行空值填充:df = df[['class_id', 'class_name', 'remark']].fillna(method='ffill')
如果你是需求分析中的需求1放典,那么請繼續(xù)以下步驟逝变。

3.對數(shù)據(jù)進行分組

本步驟需要對沒有合并單元格的列根據(jù)上一步中所使用的列進行分組基茵,并將組內(nèi)的數(shù)據(jù)使用,連接起來。本例中使用的沒有合并單元格的列是student_list列壳影」安悖可以看到示例數(shù)據(jù)集已經(jīng)被根據(jù)class_id分為4組,且各組內(nèi)的student_list元素已分別被,連接起來放到一個單元格中宴咧,新生成的 df_student數(shù)據(jù)集的索引是class_id根灯。

df_student = df.groupby('class_id').agg({"student_list": ', '.join})
對數(shù)據(jù)進行分組

4.去除帶有空值的行

此步需要對原數(shù)據(jù)進行中帶有空值的行去掉,并將student_list列丟棄掺栅。

丟棄student_list列的原因是:在上一步已經(jīng)生成了一個新的數(shù)據(jù)集df_student烙肺,這個數(shù)據(jù)集中的student_list列才是我們想要的數(shù)據(jù)

# axis=0 代表去除帶有一個或多個空值的行,對應的 axis=1 代表去除帶有一個或多個空值的列氧卧,本例中我們需要去除帶有空值的行
df = df.dropna(axis=0).drop('student_list', axis=1)
去除帶有空值的行后的數(shù)據(jù)

5.合并數(shù)據(jù)集

此步驟將上述步驟中產(chǎn)生的兩個數(shù)據(jù)集dfdf_student進行合并桃笙,得到最終想要的結(jié)果集。

# 采用 merge() 函數(shù)將 df 和 df_student 根據(jù) class_id 進行左連接合并數(shù)據(jù)
# left_on='class_id' 代表 df 采用 class_id 作為連接條件
# right_index=True 代表 df_student 將索引作為連接條件
df = pd.merge(df, df_student, how='left', left_on='class_id', right_index=True, copy=False)
最終結(jié)果集

補充:數(shù)據(jù)連接示意圖

數(shù)據(jù)連接示意圖

如果你覺得此文對你有幫助假抄,請記得 點贊 收藏 + 關注 哦

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怎栽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宿饱,更是在濱河造成了極大的恐慌,老刑警劉巖脚祟,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谬以,死亡現(xiàn)場離奇詭異,居然都是意外死亡由桌,警方通過查閱死者的電腦和手機为黎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來行您,“玉大人铭乾,你說我怎么就攤上這事⊥扪” “怎么了炕檩?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捌斧。 經(jīng)常有香客問我笛质,道長,這世上最難降的妖魔是什么捞蚂? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任妇押,我火速辦了婚禮,結(jié)果婚禮上姓迅,老公的妹妹穿的比我還像新娘敲霍。我一直安慰自己俊马,他們只是感情好,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布肩杈。 她就那樣靜靜地躺著潭袱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锋恬。 梳的紋絲不亂的頭發(fā)上屯换,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天,我揣著相機與錄音与学,去河邊找鬼彤悔。 笑死,一個胖子當著我的面吹牛索守,可吹牛的內(nèi)容都是我干的晕窑。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼卵佛,長吁一口氣:“原來是場噩夢啊……” “哼杨赤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起截汪,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤疾牲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后衙解,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阳柔,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年蚓峦,在試婚紗的時候發(fā)現(xiàn)自己被綠了舌剂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡暑椰,死狀恐怖霍转,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情一汽,我是刑警寧澤避消,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站角虫,受9級特大地震影響沾谓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戳鹅,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一均驶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枫虏,春花似錦妇穴、人聲如沸爬虱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跑筝。三九已至,卻和暖如春瞒滴,著一層夾襖步出監(jiān)牢的瞬間曲梗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工妓忍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虏两,地道東北人。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓世剖,卻偏偏與公主長得像定罢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旁瘫,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容