合并 csv 值并输出到 csv
Combine csv values and output to csv
我正在尝试读取 csv 文件并合并重复值,然后再次将这些值输出到 csv 中。
- 遍历文本文件中的每一行。第一行包含 headers,因此应跳过。
- 将每行中找到的三个值分开。每行包含产品名称、销售数量和单价(单个产品的价格),以制表符分隔。
- 为每个产品的销售数量保留一个 运行 总数;例如,“产品 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)
您可以为此使用 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)
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")
我正在尝试读取 csv 文件并合并重复值,然后再次将这些值输出到 csv 中。
- 遍历文本文件中的每一行。第一行包含 headers,因此应跳过。
- 将每行中找到的三个值分开。每行包含产品名称、销售数量和单价(单个产品的价格),以制表符分隔。
- 为每个产品的销售数量保留一个 运行 总数;例如,“产品 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)
您可以为此使用 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)
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")