如果引发 System.ArgumentException,如何将数据框行传递给 API?

Posted

技术标签:

【中文标题】如果引发 System.ArgumentException,如何将数据框行传递给 API?【英文标题】:How to pass row of dataframe into API if System.ArgumentException being raised? 【发布时间】:2019-01-21 17:32:01 【问题描述】:

我的 df 看起来像这样:

id
1
2
3

我需要遍历数据帧(帧 df 中只有 1 列)并将每个 ID 传递到 API,在等号后显示 &leadId=。即&leadId=1

我一直在尝试这段代码:

lst = []

for index,row in df.iterrows():
    url = 'https://url.com/path/to?username=string&password=string&leadId=index'
    xml_data1 = requests.get(url).text
    lst.append(xml_data1)
    print(xml_data1)

但我得到错误:

System.ArgumentException: Cannot convert index to System.Int32.

我在我的代码中做错了什么,没有将索引值传递给 api 中的参数?我也尝试将行传递到 API 并得到相同的错误。

提前谢谢你。

编辑:

通过这行代码将数据帧转换为int:

df = df.astype(int)

在 API 参数中将以下更改为行而不是索引。

 for index,row in df.iterrows():
        url = 'https://url.com/path/to?username=string&password=string&leadId=row'
        xml_data1 = requests.get(url).text
        lst.append(xml_data1)
        print(xml_data1)

得到同样的错误。

编辑2:

完整的回溯:

System.ArgumentException: Cannot convert index to System.Int32.
Parameter name: type ---> System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

【问题讨论】:

我刚刚通过type(df.Id)检查了类型。我得到`pandas.core.series.Series` 我做了 print(type(row)) 我得到了 将列更改为 int,并将 URL 中的索引更改为行仍然出现相同的错误 对如何转换为 int 进行了编辑。 添加了完整的回溯 【参考方案1】:

您应该将您的 int 转换为 API 期望的类型

df.id=df.id.astype('int32')

使用您当前的 url 字符串 API 正在尝试将作为字符串的“行”转换为不可能的整数。

更新你的网址字符串

url = 'https://url.com/path/to?username=string&password=string&leadId='.format(row)

【讨论】:

我运行了您的行并成功将列转换为 int32。但是,当我运行上面的代码进行迭代时,仍然会出现相同的错误 打印时添加(类型(行))我看到 int32 for index,row in df.iterrows(): url = 'https://url.com/path/to?username=string&password=string&leadId=row' xml_data1 = requests.get(url).text lst.append(xml_data1) print(xml_data1) 我正在进行先前的 api 调用以获取填充当前 df 的 ID。填充的 df 是我需要传递给 API 以获得更多信息的那个。希望这是有道理的。 将列转换回字符串。没有运气

以上是关于如果引发 System.ArgumentException,如何将数据框行传递给 API?的主要内容,如果未能解决你的问题,请参考以下文章

如果字符串不在一个或多个列表中,则引发错误

如果从 Fragment 调用 DialogFragment 将引发 ClassCastException

如果第一个语句引发异常,是不是会执行以下语句?

如果不立即重新引发异常回溯,则隐藏

如果主键更改,SQL 更新触发器会引发错误

如果未找到任何内容,Object.get() 将引发异常 [重复]