c++ list用法_Python实现switch/case用法案例

实际中遇到的两个问题?

—— 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 no consensus (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)

3236597f95d6aab236684a779dc4c897.png

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

a2fc874a3b524342ee18cb843ca2470b.png

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']]

通过以上处理,对数据进行分类分组,便于后续数据分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值