如果引发 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 转换为 API 期望的类型
df.id=df.id.astype('int32')
使用您当前的 url 字符串 API 正在尝试将作为字符串的“行”转换为不可能的整数。
更新你的网址字符串
url = 'https://url.com/path/to?username=string&password=string&leadId='.format(row)
【讨论】:
我运行了您的行并成功将列转换为 int32。但是,当我运行上面的代码进行迭代时,仍然会出现相同的错误 打印时添加(类型(行))我看到 int32for 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?的主要内容,如果未能解决你的问题,请参考以下文章