Daniel Hutchinson
Daniel Hutchinson

Reputation: 165

Pandas - Reiterating rows through csv

Obligatory warning - new to Python and Pandas.

I have a .csv file containing information that I'd like to run through CanvasAPI to grab user names. The .csv layout is:

     Name  user_id
0  Name_1     7454
1  Name_2     7075
2  Name_3     7377
3  Name_4     7259
4  Name_5     7294
5  Name_6     7491

I can process individual cells through the get_user function with no difficulty, as below:

from canvasapi import Canvas
import pandas as pd

df = pd.read_csv("Test2.csv")

user = df['user_id'][0]

print(canvas.get_user(user))

With an output of:

Name_1 (7454)

However, I'm utterly stumped on how to reiterate over rows in Pandas for similar pulls. My first code attempt is:

users = df['user_id'][0:5]

def user_id():
    for user in users:
        print(user)

print(canvas.get_user(user_id()))

Which generates the following error:

7454
7075
7377
7259
7294
Traceback (most recent call last):
  File "C:\Users\danie\AppData\Local\Programs\Python\Python39\lib\site-packages\canvasapi\util.py", line 116, in obj_or_id
    return int(parameter)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\danie\AppData\Local\Temp\atom_script_tempfiles\2021523-18696-123dxol.cjwo", line 39, in <module>
    print(canvas.get_user(user_id()))
  File "C:\Users\danie\AppData\Local\Programs\Python\Python39\lib\site-packages\canvasapi\canvas.py", line 1221, in get_user
    user_id = obj_or_id(user, "user", (User,))
  File "C:\Users\danie\AppData\Local\Programs\Python\Python39\lib\site-packages\canvasapi\util.py", line 133, in obj_or_id
    raise TypeError(message)
TypeError: Parameter user must be of type User or int.

In trying to reiterate a second way:

print(canvas.get_user(df['user_id'][0:5]))

I run into this error:

Traceback (most recent call last):
  File "C:\Users\danie\AppData\Local\Temp\atom_script_tempfiles\2021523-18696-gmkiri.t4uur", line 49, in <module>
    print(canvas.get_user(df['user_id'][0:5]))
  File "C:\Users\danie\AppData\Local\Programs\Python\Python39\lib\site-packages\canvasapi\canvas.py", line 1218, in get_user
    elif user == "self":
  File "C:\Users\danie\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 1442, in __nonzero__
    raise ValueError(
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

And a third attempt:

def user_id():
    for i, row in df.iterrows():
        print(f"{row[1]}\n")

user_id = pd.to_numeric(user_id())

print(canvas.get_user(user_id))

Yields this error:

7454

7075

7377

7259

7294

7491

Traceback (most recent call last):
  File "C:\Users\danie\AppData\Local\Programs\Python\Python39\lib\site-packages\canvasapi\util.py", line 116, in obj_or_id
    return int(parameter)
ValueError: cannot convert float NaN to integer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\danie\AppData\Local\Temp\atom_script_tempfiles\2021523-18696-62ic5r.qihqf", line 41, in <module>
    print(canvas.get_user(user_id))
  File "C:\Users\danie\AppData\Local\Programs\Python\Python39\lib\site-packages\canvasapi\canvas.py", line 1221, in get_user
    user_id = obj_or_id(user, "user", (User,))
  File "C:\Users\danie\AppData\Local\Programs\Python\Python39\lib\site-packages\canvasapi\util.py", line 133, in obj_or_id
    raise TypeError(message)
TypeError: Parameter user must be of type User or int.

I'm officially out of ideas on how to proceed. Any ideas on what I've done wrong, and where to move in the right direction? All help greatly appreciated.

Upvotes: 0

Views: 56

Answers (0)

Related Questions