Python實現switch/case用法案例

2021-02-19 Python數據分析實例
實際中遇到的兩個問題?—— Pandas的DataFrame如何按指定list排序—— Python的條件分支語句switch/case如何實現基本用法

# 引入pandas的數據類型「category」,從而進行排序。

# python中沒有switch case語句。官方的解釋:You can do this easily enough with a sequence of if... elif... elif... else.There have been some proposals for switch statement syntax, but there is noconsensus (yet) on whether and how to do range tests.

https://docs.python.org/2/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python

可用字典方法解決這個問題,具體方法如下:

def function_1(...):
    ...

functions = {'a': function_1,
             'b': function_2,
             'c': self.method_1, ...}

func = functions[value]
func()

實現過程數據源

import pandas as pd
df=pd.read_excel(r".\test.xlsx")
display(df)

Pandas的DataFrame按指定list排序來覆蓋默認排序

df_1=pd.DataFrame({"itemtype":list(df.ITEMTYPE.unique())})

# 設置成「category」數據類型
df_1['itemtype'] = df_1['itemtype'].astype('category')

#情況1:指定的list所包含元素與Dataframe中需要排序的列的元素一致
# list_custom1=["電耗量","動力用電","空調用電"]

# #使用 reorder_categories()方法來實現,inplace = True,使 recorder_categories生效
# df_1['itemtype'].cat.reorder_categories(list_custom, inplace=True)
# # inplace = True,使 df生效
# df_1.sort_values('itemtype', inplace=True)

# 情況2:指定list元素多的情況,一把指定的list所包含元素比Dataframe中需要排序的列的元素多,覆蓋需要排序的所有元素。
#list_custom2=["電耗量","照明插座用電","空調用電","動力用電","特殊用電"]
# 使用 set_categories()方法來實現,inplace = True,使 set_categories生效
df_1['itemtype'].cat.set_categories(list_custom2, inplace=True)
df_1.sort_values('itemtype', ascending=True)
df_1

Python的switch/case實現方法

# switch = {"keyA":functionA,"keyB":functionB,"keyC":functionC}
# try:
#   switch["value"]() #執行相應的方法。
# except KeyError as e:
#       pass 
#分支語句
switch = { "電耗量": lambda x:list(x[x.ITEMTYPE=="電耗量"]["NAME"]),
    "照明插座用電": lambda x:list(x[x.ITEMTYPE=="照明插座用電"]["NAME"]),
    "空調用電": lambda x:list(x[x.ITEMTYPE=="空調用電"]["NAME"]),
    "動力用電": lambda x:list(x[x.ITEMTYPE=="動力用電"]["NAME"]),
    "特殊用電": lambda x:list(x[x.ITEMTYPE=="特殊用電"]["NAME"])}

#以上等效語句:list(df.loc[df.ITEMTYPE=="電耗量","NAME"])

#存儲數據
fxzl_list=[]
itemtype_list=[]
for i in list(df_1.itemtype):
    try:
        fxzl_list.append(switch[i](df))
        itemtype_list.append(i)
    except KeyError as e:
        pass
#輸出數據
itemtype_list
fxzl_list

['電耗量', '空調用電', '動力用電']

[['支路1', '支路4', '支路16'], ['支路2', '支路3', '支路6', '支路7', '支路8', '支路9', '支路10', '支路11', '支路13', '支路14', '支路15'], ['支路5', '支路12']]

通過以上處理,對數據進行分類分組,便於後續數據分析。

相關焦點

  • 5分鐘學會如何在Python中實現Switch-case
    Switch-case語句是編程控制的強大工具。在本文中,首先帶領大家領略Java語言中的Switch,隨後用實例教會大家如何用Python裡實現Switch相同效果。實例教會大家如何用Python裡實現Switch相同效果Switch-case語句是一種功能強大的編程功能,允許根據變量或表達式的值控制程序的流程。可以使用它來執行不同的代碼塊,具體取決於運行時的變量值。以下是Java中的switch語句的示例。
  • Python 為什麼不支持 switch 語句?
    它的用法不難理解:switch 語句的值滿足哪一個 case 情況,就會執行對應的代碼塊,執行時遇到 break 就跳出,否則就繼續執行下一個 case 分支;一般會在最後放一個 default 分支,作為兜底。
  • 編程入門第六課,交換語句(switch,case)
    今天福哥會給童鞋們講講交換語句(switch,case)的使用方法,交換語句適合對一個變量的值等於不同內容的時候進行不同處理的情況。其實來說交換語句(switch,case)完全可以通過條件語句(if)來替代,不過使用交換語句可以有更高的執行效率,還可以讓代碼結構看起來更加清晰,所以如果情況適合的時候福哥還是推薦使用交換語句來編寫代碼2.
  • Java基礎篇——Java中switch case語句用法及注意事項面試題9期
    本文主要說一說關於switch case語句用法及注意事項,應對面試官的提問。
  • Python中如何實現Switch/Case語句?
    Java代碼中可以用Switch/Case語句來實現:public static String getSeason(int season) { String SeasonName = ""; switch (season) { case 1:      SeasonName = "Spring"; break;
  • C++總結 | 11 開關語句switch-case
    不寫break,可以讓我們實現更加豐富的功能。第一種用法是,當表達式的不同的值執行的語句一樣時,我們只在最後一個case後面寫執行的語句和break。#include<iostream>using namespace std;int main(){  int score;  cin>>score;  switch
  • 為什麼Python中沒有switch語句?
    作者:pydanny原文:http://www.pydanny.com/why-doesnt-python-have-switch-case.html
  • Python中switch語句怎麼用,問愣了很多人
    今天我們來聊聊switch,斷斷續續的,學習Python編程已經學習很久了,最近要用到分支語句,就習慣性的想到了,switch-case語句,這個在大部分主流程式語言中都有,如C,C++,C#,Java等等。但是作為python編程愛好者的我,竟然剛剛才發現python語言中居然沒有switch-case語句!!
  • 如何理解 python中的switch
    python相比較其他語言像java,c++之類的還是更容易理解和使用的。我覺得比較奇怪的就是switch和lambda,當然其他也還有一些難點,現在我就來分析一下switch的用法。我們以加減和一個隨意名字的函數來解析switch的用法,說白了也是很簡答嗎的。
  • C語言switch語句用法總結
    對於switch語句你都學會使用了嗎?本文將總結switch語句基本用法及使用技巧,希望能給大家提供參考。1、 switch語句基本用法C語言中,switch語句是一種多分支選擇語句,在實際應用中,要在多種情況中選擇一種情況,執行某一部分語句。
  • switch case 的運用
    語句代替,請看下面的代碼:#include <stdio.h>int main(){int a;printf("Input integer number:");scanf("%d",&a);switch(a){case 1: printf("Monday\n"); break;
  • 沒人比我更懂if-else和switch-case
    if-else與switch-case既生瑜,何生亮。邏輯上,真的if-else可以搞定switch-case的事,但是你看看下面的代碼。 if(likely(XXX)) {/*...*/} else {/*...*/}或者 if(unlikely(XXX)) {/*...*/} else {/*...*/}switch-case的注意事項好了,下面講switch-case。
  • Java基礎之switch-case 語句
    case 常量表達式2:        語句2;        break;    default:        語句;}通過switch(表達式)來接受參數,再通過case來比較,如果傳入的參數等於case後的就執行該判斷後的語句。
  • 通過字節碼看if-else和switch-case
    條件語句是我們使用非常頻繁的語法之一,其中if-else和switch-case最為常用,那很多同學也會有疑惑,這兩種方式有什麼區別,哪個效率更高一些呢。接下來我們就從字節碼的角度,看看這兩種方法的實現。先來看看if-else。
  • C++中SWITCH-CASE BREAK語句的使用例子
    在C++++中,也有這樣的開關,那就是switch語句。它能夠很簡捷地描述出多岔路口的情況。具體的語法格式為:switch(表達式){ case 常量表達式1: { 語句塊1; break; } …… case 常量表達式n: { 語句塊n; break; } default: { 語句塊n+1; }}
  • Java中有趣的switch,你不知道的switch用法-第14節
    switch語法:語法很簡單看下邊代碼:switch(變量) {case 常量值1://邏輯1;break;就是switch中的變量,變量是多少,就會匹配到具體的case中,只要匹配到了某一個case,就會一直執行到方法結束,這是switch的特性。
  • case的用法,in case (of), in no case, it's the case都要會用
    今天我們來學習case的用法。;真相; 箱Set my case over the shelves.Can you cite another case like this one?你能舉出另一個像這樣的案例嗎?She gave an accurate account of the case.她對情況作了準確的敘述。
  • 揭秘::switch...case為什麼比if...else執行效率高?
    在C語言中,條件判斷語句是程序的重要組成部分,也是系統業務邏輯的控制手段,教科書告訴我們switch...case...語句比if...else if...else執行效率要高,但這到底是為什麼呢?本文嘗試從彙編的角度予以分析並揭曉其中的奧秘。
  • C#核心開發-使用switch語句實現輸入學生的年齡,判斷並輸出結果
    C#核心開發-第6單元-switch語句-第1節:基本語法和案例一1.switch中的每個case語句中,必須使用break退出。(2). 如果每個case都沒有匹配值,則就執行default後面的語句塊,default語句也必須使用break退出。(3). 如果存在多個case並列存在時,它們之間是或的關係,都會執行同一段代碼。
  • python他律筆記系列二
    語法if語句  if-elif-else 與c/c++ 不同的是每個條件後面需要使用冒號:另外python中無switch-case語句while語句 與c/c++一致所需要注意的就是需要加上冒號:另外python中無do...while循環對於 while 1這類死循環可以通過crtl+c強制退出但是有while...else 語句for語句