С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 29

Pandas и работа с csv файлом

30.11.2021, 22:46. Показов 3329. Ответов 3

Студворк — интернет-сервис помощи студентам
Есть файл films.csv
На всякий приложу в его в архиве films.rar

Задача:
Посчитать какого жанра среди прибыльных фильмов больше всего (Прибыль это revenue минус budget)

Я нашел прибыльные фильмы, а вот найти самый прибыльный жанр у меня не получается, т.к. там в одной только колонке genre может идти вот так: Adventure|Fantasy|Action|Western|Thrille r и у меня не получается разбить их по разным жанрам
Ниже в комментариях над функцией расписал, что я пытаюсь сделать

Помогите решить задачку

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import numpy as np 
import pandas as pd 
 
#Функция подсчета по условию задачи
'''
P.s. В столбце genres такой формат, что в одной ячейке несколько жанров, например: Adventure|Fantasy|Action|Western|Thriller, в следующей строке может быть уже меньше жанров, пример: Crime|Thriller
В теории должна разбивать столбец genres на разные жанры, добавлять в массив только новые жанры, а уже потом считать, какой жанр принес наибольшее кол-во прибыли
 
def income(data):
    arr = []
    for i in range(data['profit'].count()):
        a = data.profit[i]
        s = a.find('|')
        b= a[:s]
        if b not in arr[]:
                
    return data
    
'''
 
data = pd.read_csv('films.csv')
 
#Функция feels() и добавление новой колнки profit, где считается прибыль
def feels(data):
    mas = []
    for i in range(data['budget'].count()):
        mas.append(data.revenue[i] - data.budget[i])
    data.insert(2, "profit", mas, True)
    data = data.sort_values(by='profit', ascending=False)
    data = data.drop(data[data['profit'] <= 0].index)
    data = data[['genres', 'profit']]
    return data
 
#Вызов функции
data = feels(data)
#data = income(data)
 
#Вывод
print(data)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2021, 22:46
Ответы с готовыми решениями:

Работа с файлом csv
Пусть дан файл students.csv, в котором содержится информация о студентах в виде: №;ФИО;Возраст;Группа 1;Иванов Иван...

Работа с файлом .csv
Имеется файл .csv (скачать можно отсюда https://www.kaggle.com/mehdidag/black-friday) Требуется его обработать и выполнить несколько...

Работа с csv файлом
filename = 'data_2017-12-27.csv' i = 0 c1 = 0 data = data1 = with open(filename) as fl: reader =...

3
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
01.12.2021, 12:36
Veanes, Попробуй
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pandas as pd
import numpy as np
df = pd.DataFrame({
    'films': ['one', 'two', 'three', 'four'],
    'genres': ['a|c|d', 'b', 'b|c|d', 'a|c'], 
    'profit': [1, 2, -3, 4],
    'budget': [100, 200, 300, 400]
})
#print(df)
 
 
df['genres'] = df['genres'].map(lambda x: x.split('|'))
df = df.explode('genres').reset_index(drop=True)
#print(df)
 
index = pd.MultiIndex.from_frame(df[['films', 'genres']])
df1 = pd.DataFrame(df['profit'].to_list(), index=index)
df1 = df1.unstack(level=-1).sum(0).reset_index()
df1.drop(df1.columns[[0]], axis=1, inplace=True)
df1.columns = ['genres', 'profit']
#print(df1)
 
print(*df1.loc[df1.profit.argmax(),:].values)
0
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 29
01.12.2021, 15:23  [ТС]
Пробовал добавить ваш код в свой, но чего-то не получается
Подскажите, что я здесь сделал не так ?

Столбцы в файле:
(жанр) genres, (бюджет) budget, (кассовые сборы) revenue, (название фильма) original_title

Traceback (most recent call last):
Файл "C:\Users\samky\Desktop\Homework\Python\ 30.11\1.py", строка 28, из <module> df1 = pd.DataFrame(data['profit'].to_list(), index=index)
builtins.NameError: name 'index' is not defined

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import numpy as np 
import pandas as pd 
 
data = pd.read_csv('films.csv')
 
#Функция подсчета по условию задачи
def income(data):
    data['genres'] = data['genres'].map(lambda x: x.split('|'))
    data = data.explode('genres').reset_index(drop=True)
    index = pd.MultiIndex.from_frame(data[['original_title', 'genres']])
    df1 = pd.DataFrame(data['profit'].to_list(), index=index)
    df1 = df1.unstack(level=-1).sum(0).reset_index()
    df1.drop(df1.columns[[0]], axis=1, inplace=True)
    df1.columns = ['genres', 'profit']
    return df1
 
#Функция feels() и добавление новой колнки profit, где считается прибыль
def feels(data):
    mas = []
    for i in range(data['budget'].count()):
        mas.append(data.revenue[i] - data.budget[i])
    data.insert(2, "profit", mas, True)
    data = data.sort_values(by='profit', ascending=False)
    data = data.drop(data[data['profit'] <= 0].index)
    data = data[['original_title', 'genres', 'profit']]
    return data
 
#Вызов функции
data = feels(data)
data = income(data)
 
#Вывод
print(*data.loc[data.profit.argmax(),:].values)
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
01.12.2021, 17:26
Лучший ответ Сообщение было отмечено Veanes как решение

Решение

Veanes,
Python
1
2
3
4
5
6
def income(data):
    data['genres'] = data['genres'].map(lambda x: x.replace(' ', '_').split('|'))
    data = data.explode('genres').reset_index(drop=True)
    df = data.groupby(['genres'])['profit'].agg(['sum']).reset_index()
    df.columns = ['genres', 'profit']
    return df
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2021, 17:26
Помогаю со студенческими работами здесь

Работа с файлом csv
Есть файл students.csv, в котором содержится информация о студентах в виде: №;ФИО; Возраст; Группа 1;Иванов Иван Иванович;...

Работа с csv файлом
import csv from itertools import zip_longest item_1 = region1 item_2 = region1 data = export_data = zip_longest(*data,...

Работа с csv файлом через numpy
import numpy as np import csv def load_data(filename=None): if filename == &quot;./Social_Network_Ads.csv&quot;: header = ...

Работа с файлом csv
Есть файл students.csv, в котором содержится информация о студентах в виде: №;ФИО; Возраст; Группа 1;Иванов Иван Иванович;...

Работа с файлом csv
Здравствуйте! Есть задача, есть функции кнопок void Anket::on_takeNumber_clicked() и void Anket::on_SaveFile_clicked(). В первой функции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru