Преобразовать строку в целое число в столбце в кадре данных (рейтинг 5 звезд = 5) - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу преобразовать столбец, содержащий строки отзывов, такие как 5,0 из 5 звезд, в целое число.

0    5.0 out of 5 stars
1    2.0 out of 5 stars
2    5.0 out of 5 stars
3    5.0 out of 5 stars
4    5.0 out of 5 stars
5    5.0 out of 5 stars
6    4.0 out of 5 stars
7    5.0 out of 5 stars
8    5.0 out of 5 stars
9    5.0 out of 5 stars
Name: StarRating, dtype: object

Я знаком с итерациями по строкам и столбцам и пытался

df[["StarRating"]] = df[["StarRating"]] .apply(pd.to_numeric)

, но получаю следующую ошибку

ValueError: Unable to parse string "5.0 out of 5 stars" at position 0

Я также пытался :

for col in df.StarRating()
    if df['StarRating'] = (df['StarRating'] !='5.0 out of 5 stars').astype(int, 5.0)
    if df['StarRating'] = (df['StarRating'] !='4.0 out of 4 stars').astype(int, 4.0)
    if df['StarRating'] = (df['StarRating'] !='3.0 out of 3 stars').astype(int, 3.0)
    if df['StarRating'] = (df['StarRating'] !='2.0 out of 2 stars').astype(int, 2.0)
    if df['StarRating'] = (df['StarRating'] !='1.0 out of 1 stars').astype(int, 1.0)
    print(StarInt)

но получите ошибку

File "<ipython-input-43-e2e6fd3fae34>", line 1
    for col in df.StarRating()
                              ^
SyntaxError: invalid syntax

Любой совет будет принят с благодарностью. Спасибо

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Если значения всегда являются первыми элементами в строках, вы также можете сделать это:

ratings = ['5.0 out of 5 star', '2.0 out of 5 stars', '4.0 out of 5 stars']
df = pd.DataFrame(ratings, columns = ['rating'])

df['stars'] = pd.to_numeric(df['rating'].apply(lambda x: x[:3])).astype(int)

Он «смотрит» на каждую ячейку столбца «рейтинг» и получает первые 3 элемента из это.

0 голосов
/ 29 апреля 2020

Попробуйте разбить строку и преобразовать первый элемент в число с плавающей точкой:

df['StarRatingNumeric'] = df.StarRating.apply(lambda r: float(r.split()[0]))

или, если вам нужен целочисленный тип данных:

df['StarRatingNumeric'] = df.StarRating.apply(lambda r: int(float(r.split()[0])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...