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

Pandas合并12个月销售数据遇NaN问题,寻求替代解决方案

合并2019年月度销售数据的可行方法

首先,你用pd.concat出现NaN值,大概率是因为各文件的列名看似一致,实际存在差异(比如大小写、首尾空格、部分文件多列/少列)。先检查所有数据框的列名是否完全匹配:

# 检查所有数据框的列名
for idx, df in enumerate([sales_1, sales_2, sales_3, sales_4, sales_5, sales_6, sales_7, sales_8, sales_9, sales_10, sales_11, sales_12], 1):
    print(f"第{idx}个月数据列名: {df.columns.tolist()}")

如果发现列名不一致,先统一标准化:

# 去除列名首尾空格并转为小写(按需调整)
for df in [sales_1, sales_2, sales_3, sales_4, sales_5, sales_6, sales_7, sales_8, sales_9, sales_10, sales_11, sales_12]:
    df.columns = df.columns.str.strip().str.lower()

以下是几种可行的合并方法:

方法1:修正后的pd.concat(推荐)

确保列名一致后,直接按行合并,添加ignore_index=True重置索引:

all_sales = pd.concat(
    [sales_1, sales_2, sales_3, sales_4, sales_5, sales_6, sales_7, sales_8, sales_9, sales_10, sales_11, sales_12],
    axis=0,  # 按行合并(默认值,可省略)
    ignore_index=True
)

如果部分文件有额外列,只想保留所有文件共有的列,可添加join='inner':

all_sales = pd.concat(
    [sales_1, sales_2, sales_3, sales_4, sales_5, sales_6, sales_7, sales_8, sales_9, sales_10, sales_11, sales_12],
    axis=0,
    ignore_index=True,
    join='inner'
)

方法2:使用append(兼容旧版Pandas)

虽然append已被Pandas官方标记为废弃,但在旧版本中仍可使用:

all_sales = sales_1.append(
    [sales_2, sales_3, sales_4, sales_5, sales_6, sales_7, sales_8, sales_9, sales_10, sales_11, sales_12],
    ignore_index=True
)

方法3:批量读取+合并(更简洁高效)

避免重复编写12次read_csv,用循环批量处理所有文件:

import os
import pandas as pd

# 替换为你的CSV文件所在文件夹路径
folder_path = "./"

# 获取所有月度销售文件
sales_files = [f for f in os.listdir(folder_path) if f.startswith("Sales_") and f.endswith(".csv")]

# 批量读取并标准化列名
dfs = []
for file in sales_files:
    df = pd.read_csv(os.path.join(folder_path, file))
    df.columns = df.columns.str.strip().str.lower()
    dfs.append(df)

# 合并所有数据
all_sales = pd.concat(dfs, axis=0, ignore_index=True)

方法4:标记数据来源的合并(可选)

如果需要保留每个数据的月度来源,可添加keys参数:

months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
all_sales = pd.concat(
    [sales_1, sales_2, sales_3, sales_4, sales_5, sales_6, sales_7, sales_8, sales_9, sales_10, sales_11, sales_12],
    keys=months,
    axis=0
)

这样可以通过all_sales.loc["January"]快速筛选对应月份的数据。

内容的提问来源于stack exchange,提问作者Adejuwon Boboye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:00:59