如何在PyCharm中计算CSV文件的月度变化百分比及解决导入问题
问题解决:CSV文件读取失败 + 月度变化百分比计算
一、先解决文件找不到&代码语法错误
你的代码里存在几个关键问题:
- 变量名拼写错误:
open语句定义的变量是csvfile,但DictReader里写的是csv_file,两者不匹配 - 中文引号问题:代码里的
‘sales.csv’是中文单引号,必须换成英文单引号'sales.csv' - 文件路径问题:如果
sales.csv没和你的Python脚本放在同一目录,PyCharm会找不到文件。要么把文件移到脚本同目录,要么直接写绝对路径,比如:with open("C:/Users/xxx/YourProject/sales.csv", "r", encoding="utf-8") as csvfile:
修正后的基础读取代码:
import csv # 确保文件和脚本同目录,或者使用绝对路径 with open("sales.csv", "r", encoding="utf-8") as csvfile: csv_reader = csv.DictReader(csvfile) for row in csv_reader: # 打印每行实际数据,而非固定文件名 print(row)
二、计算月度变化百分比
假设你的CSV包含month(格式如"2023-01")和sales(销售额数值)两列,这里提供两种实现方式:
方式1:用pandas快速处理(推荐)
pandas处理时间序列和数值计算更高效,步骤如下:
- 先安装pandas(如果没装),在PyCharm终端运行:
pip install pandas - 计算代码:
import pandas as pd # 读取CSV并解析日期列 df = pd.read_csv("sales.csv", parse_dates=["month"]) # 按月份排序,确保时间顺序正确 df = df.sort_values("month") # 计算月度变化百分比:(本月销售额-上月销售额)/上月销售额 * 100 df["monthly_change_pct"] = df["sales"].pct_change() * 100 # 第一行无上月数据,填充为0 df["monthly_change_pct"] = df["monthly_change_pct"].fillna(0) # 打印结果 print(df)
方式2:纯csv模块手动实现
如果不想用第三方库,可以自己收集数据、排序后计算:
import csv from datetime import datetime sales_data = [] with open("sales.csv", "r", encoding="utf-8") as csvfile: csv_reader = csv.DictReader(csvfile) for row in csv_reader: # 转换日期和销售额格式 month = datetime.strptime(row["month"], "%Y-%m") sales = float(row["sales"]) sales_data.append({"month": month, "sales": sales}) # 按月份排序 sales_data.sort(key=lambda x: x["month"]) # 遍历计算月度变化百分比 for i in range(len(sales_data)): if i == 0: sales_data[i]["monthly_change_pct"] = 0.0 else: prev_sales = sales_data[i-1]["sales"] curr_sales = sales_data[i]["sales"] change_pct = ((curr_sales - prev_sales) / prev_sales) * 100 sales_data[i]["monthly_change_pct"] = round(change_pct, 2) # 输出结果 for item in sales_data: print(f"月份: {item['month'].strftime('%Y-%m')}, 销售额: {item['sales']}, 变化率: {item['monthly_change_pct']}%")
内容的提问来源于stack exchange,提问作者Chouna
相关产品推荐
相关产品推荐

