You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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处理时间序列和数值计算更高效,步骤如下:

  1. 先安装pandas(如果没装),在PyCharm终端运行:
    pip install pandas
    
  2. 计算代码:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:52:24