how to iterate in a dataframe with loop for

0

I have a list

I'm trying to iterate with a for loop in a dataframe to query a data in a webservice:

value=[]

for i in range(0, 10):
    nit = mydataset_df.CO_tin_no
    url = 'http://www.rues.org.co/RM/ConsultaNIT_json'

    headers, payload = {
            'Content-Type':
            'application/x-www-form-urlencoded; charset=UTF-8'
        }, {'txtNIT': nit}
    r = requests.post(url, headers=headers, data=payload, timeout=4)
    if r.json().get('rows', False):
        res = r.json()['rows'][0]
        legal_name = res['razon_social'].title()
        value.append(legal_name)
        print value
        #mydataset_df['legal_name'] = value
    else:
        legal_name = 'no existe el numero %s' %nit
        value.append(legal_name)
        print value
        #mydataset_df['legal_name'] = value
   # print (row["name"], row["age"])

The result is not as expected, iterates over the same element and the answer is the same.

[u'Pardo Jose Gilberto']
[u'Pardo Jose Gilberto', u'Pardo Jose Gilberto']
[u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto']
[u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto']
[u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto']
[u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto']
[u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto']
[u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto']
[u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto']
[u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto', u'Pardo Jose Gilberto']
    
asked by Yan Chirino 16.10.2018 в 23:44
source

3 answers

0

Ready resolved, so I am:

 for i in range(0, 10):
    print 'esto es i =', i
    nit = mydataset_df.iloc[i]['CO_tin_no']
    print 'valor de nit', nit
    url = 'http://www.rues.org.co/RM/ConsultaNIT_json'

    headers, payload = {
            'Content-Type':
            'application/x-www-form-urlencoded; charset=UTF-8'
        }, {'txtNIT': nit}
    r = requests.post(url, headers=headers, data=payload, timeout=4)
    if r.json().get('rows', False):
        res = r.json()['rows'][0]
        legal_name = res['razon_social'].title()
       #value.append(legal_name)
        print legal_name
        print '##############################################'
       #mydataset_df['legal_name'] = legal_name
    else:
        legal_name = 'no existe el numero %s' %nit
       #value.append(legal_name)
        print legal_name
        print '**********************************************'
       #mydataset_df['legal_name'] = legal_name

and the result obtained is:

esto es i = 0
valor de nit 190xxx71
Pardo XXX yyyy
##############################################
esto es i = 1
valor de nit 860xxx85
Alberto XXXX yyyy XXXX. Ltda
##############################################
esto es i = 2
valor de nit 90xxxxxx51
Abastecedor xxxx YYYY xxxx S A S
##############################################
....

Thanks for the answers and collaboration!

    
answered by 19.10.2018 / 17:11
source
0

You are iterating over the same field again and again. Replace 0 with variable i :

value=[]

for i in range(0, 10):
    nit = mydataset_df.CO_tin_no
    url = 'http://www.rues.org.co/RM/ConsultaNIT_json'

    headers, payload = {
            'Content-Type':
            'application/x-www-form-urlencoded; charset=UTF-8'
        }, {'txtNIT': nit}
    r = requests.post(url, headers=headers, data=payload, timeout=4)
    if r.json().get('rows', False):
        // vvvvvvvvvvvvvvvvvvvv
        // Hacé el cambio aquí
        // vvvvvvvvvvvvvvvvvvvv
        res = r.json()['rows'][i] 
        legal_name = res['razon_social'].title()
        value.append(legal_name)
        print value
        #mydataset_df['legal_name'] = value
    else:
        legal_name = 'no existe el numero %s' %nit
        value.append(legal_name)
        print value
        #mydataset_df['legal_name'] = value
   # print (row["name"], row["age"])
    
answered by 16.10.2018 в 23:48
0

The main loop is poorly implemented. You have the following:

for i in range(0, 10):
    nit = mydataset_df.CO_tin_no
    [...]

In each iteration of the loop you are assigning nit the full column called CO_tin_no . This column is a Series pandas, which in many python contexts will treat as a list.

When you later do:

headers, payload = {
        'Content-Type':
        'application/x-www-form-urlencoded; charset=UTF-8'
    }, {'txtNIT': nit}

in the payload you are entering a dictionary with key 'txNIT' and value nit , which we already saw that it was the complete column. Surely when requests serialize that value to pass it to JSON pass a list with all the "nit" of the column. And in all iterations of the loop you pass the same complete column, so it is not uncommon that the answer is also always the same.

I understand that it is not what you wanted, but that you wanted to pass a single "nit" per iteration of the loop. Change it therefore to be:

for nit in mydataset_df.CO_tin_no:
    [...]

PD : I do not rule out other errors, because I can not test the code. Comment if there are more problems.

    
answered by 17.10.2018 в 10:57