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

Pandas按日期melt DataFrame后值全为NaN的解决方法

嘿,我一眼就看出问题所在了——你在value_vars里用了pd.date_range生成的Timestamp对象,但你的DataFrame里的日期列名其实是字符串格式(比如"1/22/20"),这俩类型完全不匹配,导致melt找不到对应的列,自然所有值都变成NaN啦!

问题根源拆解

你的原DataFrame日期列名是字符串格式(如"1/22/20"),但pd.date_range('1/22/20', '3/18/20', freq='D')生成的是Timestamp对象(比如2020-01-22 00:00:00)。两者类型不兼容,melt无法匹配到对应列,所以返回的Total_Count全是缺失值。

两种修复方案(任选其一即可)

方法1:直接复用DataFrame中现有的日期列名(推荐)

不用手动生成日期范围,直接提取原DataFrame里除Country之外的所有列作为value_vars,绝对不会出现匹配错误:

import pandas as pd

def meltDataFrame(df, id_vars, value_vars, var_name, value_name):
    return pd.melt(df, id_vars=id_vars, value_vars=value_vars, var_name=var_name, value_name=value_name)

# 提取原DataFrame中的日期列名(排除Country列)
date_columns = data_df.columns[data_df.columns != 'Country']
# 执行melt转换
data_df_melt = meltDataFrame(data_df, ['Country'], date_columns, 'Date', 'Total_Count')
# 可选:将Date列转换为datetime类型(方便后续时间序列分析)
data_df_melt['Date'] = pd.to_datetime(data_df_melt['Date'])

方法2:将生成的日期范围转换成和原列名一致的字符串格式

如果你一定要手动指定日期范围,需要把pd.date_range生成的Timestamp转换成和原列名相同的字符串格式(比如"1/22/20"):

import pandas as pd

def meltDataFrame(df, id_vars, value_vars, var_name, value_name):
    return pd.melt(df, id_vars=id_vars, value_vars=value_vars, var_name=var_name, value_name=value_name)

# 生成日期范围并转换成和原列名一致的字符串格式
date_range = pd.date_range('1/22/20', '2/22/20', freq='D').strftime('%m/%d/%y')
# 执行melt转换
data_df_melt = meltDataFrame(data_df, ['Country'], date_range, 'Date', 'Total_Count')
# 可选:转换为datetime类型
data_df_melt['Date'] = pd.to_datetime(data_df_melt['Date'])

测试验证

我们用模拟数据测试一下方法1的效果:

# 模拟测试数据
data_df = pd.DataFrame({
    'Country': ['US', 'Australia'],
    '1/22/20': [10, 5],
    '1/23/20': [15, 7]
})

# 应用修复后的代码
date_columns = data_df.columns[data_df.columns != 'Country']
data_df_melt = meltDataFrame(data_df, ['Country'], date_columns, 'Date', 'Total_Count')
data_df_melt['Date'] = pd.to_datetime(data_df_melt['Date'])

print(data_df_melt)

输出结果:

Country       Date  Total_Count
0        US 2020-01-22           10
1  Australia 2020-01-22            5
2        US 2020-01-23           15
3  Australia 2020-01-23            7

完美解决了NaN问题!

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:48:10