错误:无法在Python中将参数转换为整数

时间:2015-09-29 07:52:08

标签: python azure kaggle

我正在处理来自Kaggle的数据集,我想用名称提取Pandas列的标题。我使用以下代码:

    def extract_patt(patt, linea):
        matchObj = re.match(patt, linea)
        result = ""
        if matchObj:
            return matchObj.group(1).lower()
        else:
            return ""

    def extract_title(linea):
        return extract_patt('^.+,\s(.+)\..+', linea)

    titles = dataframe1["Name"].apply(extract_title)

    title_mapping = {"": 0, "mr": 1, "miss": 2, "mrs": 3, "master": 4, "dr": 5, "rev": 6, "major": 7, "col": 7, "mlle": 8, "mme": 8, "don": 9, "lady": 10, "countess": 10, "jonkheer": 10, "sir": 9, "capt": 7, "ms": 2}

    for k in title_mapping:
        titles[titles == k] = title_mapping[k]

    dataframe1["Title"] = titles

但是,当我在Azure机器学习平台上以Python代码运行此代码时,出现以下错误:

Error 0085: The following error occurred during script evaluation, please view the output log for more information:
 ---------- Start of error message from Python interpreter ----------
 data:text/plain,Caught exception while executing function: Traceback (most recent call last):
   File "C:\server\invokepy.py", line 176, in batch
     rutils.RUtils.DataFrameToRFile(outlist[i], outfiles[i])
   File "C:\server\RReader\rutils.py", line 28, in DataFrameToRFile
     rwriter.write_attribute_list(attributes)
   File "C:\server\RReader\rwriter.py", line 59, in write_attribute_list
     self.write_object(value);
   File "C:\server\RReader\rwriter.py", line 121, in write_object
     write_function(flags, value.values())
   File "C:\server\RReader\rwriter.py", line 104, in write_objects
     self.write_object(value)
   File "C:\server\RReader\rwriter.py", line 121, in write_object
     write_function(flags, value.values())
   File "C:\server\RReader\rwriter.py", line 71, in write_integers
     self.write_integer(value)
   File "C:\server\RReader\rwriter.py", line 147, in write_integer
     self.writer.WriteInt32(value)
   File "C:\server\RReader\BinaryIO\binarywriter.py", line 23, in WriteInt32
     self.WriteData(self.Int32Format, data)
   File "C:\server\RReader\BinaryIO\binarywriter.py", line 14, in WriteData
     self.stream.write(pack(format, data))
 error: cannot convert argument to integer

 ---------- End of error message from Python  interpreter  ----------
Start time: UTC 09/29/2015 07:47:02
End time: UTC 09/29/2015 07:47:13

问题可能出在映射代码中,因为如果删除它,我会有一个包含标题而不是整数的列。

编辑:我也尝试了以下代替for循环来映射,但我遇到了同样的错误:

dataframe1["Title"].replace(title_mapping, inplace=True)

2 个答案:

答案 0 :(得分:0)

根据我的经验,代码titles == k中的问题代码为titles[titles == k] = title_mapping[k]。表达式titles == k的值类型是布尔类型。

在Python中,布尔类型是一种整数值类型。 False值等于0,所有非零整数都是True值。

但是地图标题键的值类型'应该是字符串类型,以便错误消息是"不能将参数转换为整数"。

最诚挚的问候。

答案 1 :(得分:0)

我遇到了同样的问题,也遇到了泰坦尼克号数据集。我首先使用Azure内置的“项目列”删除了票证和机舱编号列,然后将文件推送到Python脚本中,现在它可以工作了。

idk在这些专栏中是什么打扰了它?有人发布了一条消息,其中第一行中的空值可能存在问题,MS表示将修复错误。