Reputation: 165
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