加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Pandas DataFrame apply()ValueError:解压缩的值太多

发布时间:2020-12-20 11:49:25 所属栏目:Python 来源:网络整理
导读:我刚刚开始探索 Python,虽然我很兴奋,但我似乎远非Python思维. 以下是一种方法示例,其中包含“次优”一词. 虽然这对我相对较小的数据集来说已经足够了,但我想知道如何更好地编写它? import pandas as pdfrom pandas import DataFrame# create sample log da
我刚刚开始探索 Python,虽然我很兴奋,但我似乎远非Python思维.

以下是一种方法示例,其中包含“次优”一词.
虽然这对我相对较小的数据集来说已经足够了,但我想知道如何更好地编写它?

import pandas as pd
from pandas import DataFrame

# create sample log data frame
lg = pd.DataFrame(['Access violation at address 00A97...','Try to edit the splines or change...','Access violation at address 00F2B...','Please make sure the main electro...'],columns=['lg_msg'])

# define message classification
err_messages = [['Access violation','ACC-VIOL','PROG'],['Please make sure th','ELE-NOT-PLACED','MOD'],['Try to edit the splines','TRY-EDIT-SPLINES','MOD']]                

# lookup code
def message_code(msg_text):
    for msg in err_messages:
        if msg_text.startswith(msg[0]):
            return msg[1]
    return ''

# lookup type
def message_type(msg_text):
    for msg in err_messages:
        if msg_text.startswith(msg[0]):
            return msg[2]
    return ''               

lg['msg_code'] = lg['lg_msg'].apply(lambda x:  message_code(x))
lg['msg_type'] = lg['lg_msg'].apply(lambda x:  message_type(x))

我尝试创建一个函数来计算日志条目代码并立即输入:

def message_code_type(msg_text):
    for msg in err_messages:
        if msg_text.startswith(msg[0]):
            return (msg[1],msg[2])
    return ('','')

lg['msg_code'],lg['msg_type'] = lg['lg_msg'].apply(lambda x:  message_code_type(x))

但得到:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-18-72f97d857539> in <module>()
----> 1 lg['msg_code'],lg['msg_code'] = lg['lg_msg'].apply(lambda x:  message_code_type(x))

ValueError: too many values to unpack (expected 2)

有没有办法不两次遍历数据帧?

任何反馈将不胜感激.

import sys
print(sys.version)
3.5.1 |Anaconda 2.4.0 (64-bit)| (default,Jan 29 2016,15:01:46) [MSC v.1900 64 bit (AMD64)]

pd.__version__
'0.17.1'

解决方法

尝试使用itertools模块中的 izip

from itertools import izip
lg['msg_code'],lg['msg_code'] = izip(*lg['lg_msg'].apply(lambda x:  message_code_type(x)))

In [21]:    lg
Out[21]:
    lg_msg  msg_code
0   Access violation at address 00A97...    PROG
1   Try to edit the splines or change...    MOD
2   Access violation at address 00F2B...    PROG
3   Please make sure the main electro...    MOD

对不起,那是2.7,你应该可以使用内置的zip

lg['msg_code'],lg['msg_type'] = zip(*lg['lg_msg'].apply(lambda x:  message_code_type(x)))

    lg_msg  msg_code    msg_type
0   Access violation at address 00A97...    ACC-VIOL    PROG
1   Try to edit the splines or change...    TRY-EDIT-SPLINES    MOD
2   Access violation at address 00F2B...    ACC-VIOL    PROG
3   Please make sure the main electro...    ELE-NOT-PLACED  MOD

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读