Объединение значений csv и вывода в csv

#python #list #csv #slice

#python #Список #csv #нарезать

Вопрос:

Я пытаюсь прочитать csv-файл и объединить повторяющиеся значения, а затем снова вывести значения в csv.

  • Повторите каждую строку в текстовом файле. Первая строка содержит заголовки, поэтому ее следует пропустить.
  • Разделите три значения, найденные в каждой строке. Каждая строка содержит название продукта, проданное количество и цену за единицу (цену одного продукта), разделенные символом табуляции.
  • Ведите текущий итог для количества проданного каждого продукта; например, общее количество проданного для ‘продукта b’ равно 12.
  • Ведите учет цены единицы каждого продукта.
  • Запишите результат в sales-report.csv; сводка должна включать название каждого продукта, объем продаж (общее количество продано) и доход от продаж (общее количество продано * по цене продукта).

То, что я намереваюсь.

Входные данные:

 product name,quantity,unit price
product c,2,22.5
product a,1,10
product b,5,19.7
product a,3,10
product f,1,45.9
product d,4,34.5
product e,1,9.99
product c,3,22.5
product d,2,34.5
product e,4,9.99
product f,5,45.9
product b,7,19.7
 

Выходные данные:

 product name,sales volume,sales revenue
product c,5,112.5
product a,4,40
product b,12,236.4
product f,6,275.4
product d,6,207
product e,5,49.95

 

Это то, что у меня есть до сих пор, я осмотрелся, и не совсем понятно, как я должен выполнять понимание списка и комбинировать значения.
Когда я искал ответ, он был в основном сложнее, чем, вероятно, должен быть, он относительно прост…

     record = []
    with open("items.csv", "r") as f:
        next(f)
        for values in f:
            split = values.rstrip().split(',')
            record.append(split)
        print(record)
 

Комментарии:

1. «запишите цену за единицу» … может ли это отличаться для разных строк с одним и тем же продуктом? Как бы вы записали цену, если да?

2. Я полагаю, что я имел в виду количество * цена за единицу = выручка от продаж

3. Да, я думаю, что неправильно истолковал требования. В выходных данных нет цены за единицу.

Ответ №1:

Для этого вы можете использовать pandas:

 import pandas as pd

df = pd.read_csv('path/to/file')
 

Затем вычислите sales revenue , groupby и sum

df = df.assign(sales_revenue=lambda x: x['quantity'] * x['unit price']).groupby('product name').sum().reset_index()

 
  product name  quantity  sales_revenue
0    product a         4       20.00
1    product b        12       39.40
2    product c         5       45.00
3    product d         6       69.00
4    product e         5       19.98
5    product f         6       91.80
 

Вы можете сохранить результат в файл csv

df.to_csv('new_file_name.csv', index=False)

Комментарии:

1. Вау, спасибо, это намного проще, чем то, что я пытался. Я буду чаще использовать pandas для такого рода задач.

Ответ №2:

pandas это способ решения проблемы. Если вы еще не используете его, он объединяет операции по целым таблицам, поэтому вам не нужно выполнять итерации самостоятельно. Обратите внимание, что целые столбцы можно умножить за один шаг. groupby будет группировать фрейм данных по каждому продукту, а затем его легко суммировать.

 import pandas as pd

df = pd.read_csv("f.csv")
df["sales revenue"] = df["quantity"] * df["unit price"]
del df["unit price"]
outdf = df.groupby("product name").sum()
outdf.rename(columns={"quantity": "sales volume"})
outdf.to_csv("f-out.csv")
 

Комментарии:

1. Спасибо! Это было то, что работало лучше всего. Я возился с чтением документации для pandas, но это точно объясняет мой вопрос.