Мне дали задачу решить, с которой я, кажется, отлично справляюсь.
Задача: вывести среднее количество рецензий среди книг с рейтингом выше 4 и общим количеством оценок более 1000, а также вывести книги с рейтингом в диапазоне 2-3 и общим рейтингом ниже 500.
Вот мой код:
import pandas as pd
df = pd.read_csv('data/GoodReads_100k_books.csv')
above = df[(df['rating'] > 4) & (df['totalratings'] > 1000)].mean()
below = df[(2 <= df['rating'] <= 3) & (df['totalratings'] < 500)].mean()
print(above)
print(below)
Мне кажется, все в порядке, но он возвращает эту ошибку:
TypeError Traceback (most recent call last)
Cell In[15], line 5
1 import pandas as pd
3 df = pd.read_csv('data/GoodReads_100k_books.csv')
----> 5 above = df[(df['rating'] > 4) & (df['totalratings'] > 1000)].mean()
7 below = df[(2 <= df['rating'] <= 3) & (df['totalratings'] < 500)].mean()
9 print(above)
TypeError: can only concatenate str (not "int") to str
Я спросил TabnineAI, что не так с кодом и почему он возвращает эту ошибку.
Там говорилось, что с кодом все в порядке и конкатенация не имеет ничего общего с моим кодом.
Как я могу это решить?
Вы пытаетесь взять mean каждого столбца в фрейме данных, и, предположительно, есть один, который представляет собой смесь строковых и целочисленных значений; что дает вам эту ошибку. Например, попробуйте pd.Series(['a', 1, 4]).mean(). Вы наверное просто хотите above = df[(df['rating'] > 4) & (df['totalratings'] > 1000)]['rating'].mean()






Сообщение об ошибке указывает на то, что функцияmean() пытается преобразовать список строк в числовой. Это происходит потому, что функцияmean() применяется ко всему df, включая столбец «title», который содержит строковые значения.
Чтобы исправить это, вам следует применять функциюmean() только к числовым столбцам. Вот ярлык:
import pandas as pd
df = pd.read_csv('data/GoodReads_100k_books.csv')
numeric_columns = ['rating', 'totalratings']
above = df[(df['rating'] > 4) & (df['totalratings'] > 1000)][numeric_columns].mean()
below = df[(df['rating'] >= 2) & (df['rating'] <= 3) & (df['totalratings'] < 500)][numeric_columns].mean()
print(above)
print(below)
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.