【问题标题】:Python iterate through rows in a DataFrame and post XML values to an APIPython 遍历 DataFrame 中的行并将 XML 值发布到 API
【发布时间】:2017-02-04 16:10:15
【问题描述】:

使用更正的代码更新后。我有一个简单的 http POST 请求,它需要一些简短的 XML,但是有数百个单独的请求需要定期发布,所以 for 循环似乎是一个不错的选择。根据下面的评论,我看到我最初有一个坏循环,所以我用一个有效的代码更新了代码。我确信这不是最有效的方法,但它确实有效。

for index, row in df.iterrows():
    name = row['name']
    value = row['lengthValue']
    postalCode = row['postalCode']
    address = row['address']
    state = row['state']
    country = row['country']
    xml = """<root>
    <name>{0}/name>
    <isNew>yes</isNew>
    <length option="true" units="feet">
        <value>{1}</value>
    </length>
    <address postalCode="{2}" address1="{3}" state="{4}" country="{5}"/>
    </root>""".format(name, value, postalCode, address, state, country)
    headers = {'Content-Type': 'application/xml'}
    response= requests.post('https://some.url/id/%i/addnew' % uid, data=xml, headers=headers)

请注意,url 中还有一个变量,它是由不同函数定义的 uid 变量中的一个整数,该函数获取这些新值发布到的帐户的特定 ID。

示例数据框是:

df = pd.DataFrame({'name':['A','B','C'], 
'lengthValue':[34, 56, 23], 
'postalCode':[20001,30001,40001], 
'address':['123 Main St', '321 Front Street', '100 First Ave'], 
'state':['ME', 'OR', 'FL'], 
'country':['US', 'US', 'US']})

【问题讨论】:

  • 你有什么问题?你为什么从for 循环中return?为什么要定义headers,并在for之外发帖?
  • 代码显示不正确,帖子在 for 中,但它不起作用。经检查,枚举函数似乎没有在语句中插入值并发布到 url。
  • 请编辑您的帖子以包含一个问题。你为什么从for 循环中return

标签: python xml pandas iterator python-requests


【解决方案1】:

我认为您对 enumerate built-in 的实际作用有一个错误的想法。

简单地说,在for 循环的每次迭代中,i 将从 {0, 1, 2, ...} 中获取值,col_name 将获取 df.index 的项目。

您可以通过运行来检查:

for i, col_name in enumerate(df.index):
    print 'i ->', i
    print 'col_name ->', col_name
    print '------' # just a loop separator

然后你将不得不重新考虑如何形成你的xml 字符串。我你得到IndexError,因为.format找不到元素2

我的回答不能完全解决你的问题,因为我不知道你的变量存储了什么。特别是,我看不出row 来自哪里。但是 shuolud 指出了问题所在以及如何从那里开始工作。

【讨论】:

  • 感谢您的解释,这实际上使我能够创建一个正确的循环,我已经在上面进行了更新。真的很感激@marcos
  • 太棒了!现在 for 循环“有效”并且您正确定义/格式化了 xml 字符串,您的代码作为一个整体是否有效?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多