Micra520 2022-03-09 10:58 采纳率: 60%
浏览 135

pandas KeyError [在设置日期作为索引后,传参查找指定日期数据报错,如何解决?

之前用pandas写的时候用df[yesterday].values.tolist都可以运行,同样的代码,上面改了一点逻辑用报错 ,下面不报错 。
这是报错段落的代码
df_all = pandas.DataFrame(list(data),columns=["ta","aincome","a_pay","num","a_num","tb","bincome","b_pay","num","b_num"])
    print("同比数据转换成功")
    df_all['ta'] = pandas.to_datetime(df_all['ta'])
    # 将日期设置为索引 去掉默认索引
    df_all = df_all.set_index("ta")
    df_all['b_pay'] = df_all['b_pay'].fillna(method='ffill')
    df_all['b_num'] = df_all['b_num'].fillna(method='ffill')
    df_all['pay_rate'] = round(((df_all['a_pay'] - df_all["b_pay"]) / abs(df_all['b_pay'])) * 100, 2)
    df_all['num_rate'] = round(((df_all['a_num'] - df_all["b_num"]) / df_all['b_num']) * 100, 2)
    df_all.pay_rate = df_all['pay_rate'].astype(str).add('%')
    df_all.num_rate = df_all['num_rate'].astype(str).add('%')
    print(df_all.to_string())
    print("同比数据处理采集成功")
    warnings.simplefilter("ignore")
    df_all = df_all[['pay_rate','num_rate']].copy()
    print(df_all.to_string())
    df_all = df_all[yesterday].values.tolist()

这是同样代码但是不报错

df = pandas.DataFrame(list(data1),
                          columns=['日期', '合计绝对收益', '合计安装数', '合计花费', '合计付费', '360安装', '360花费', '360付费', '360绝对收益',
                                   '百度安装', '百度花费', '百度付费', '百度绝对收益', '搜狗安装', '搜狗花费', '搜狗付费', '搜狗绝对收益', 'web360花费',
                                   'web360付费', 'web360绝对收益', 'web百度花费', 'web百度付费', 'web百度绝对收益'])
    print("本月数据转换成功")
df.insert(1, "累计花费", "", allow_duplicates=False)
    df.insert(2, "累计安装", "", allow_duplicates=False)
    df.insert(3, "累计付费", "", allow_duplicates=False)
    df.insert(4, "月度收益", "", allow_duplicates=False)
    # 对其他字段 累加计算
    df["累计花费"] = df["合计花费"].cumsum()
    df["累计安装"] = df["合计安装数"].cumsum()
    df["累计付费"] = df["合计付费"].cumsum()
    df["月度收益"] = df["合计绝对收益"].cumsum()
    # 将日期转换为时间类型
    df['日期'] = pandas.to_datetime(df['日期'])
    # 将日期设置为索引 去掉默认索引
    df = df.set_index("日期")
    # 整体结果倒序
    df = df.iloc[::-1]

    # 取易亏账户绝对收益
    df1 = df[['搜狗绝对收益', 'web360绝对收益', 'web百度绝对收益']].copy()
    # 转换数据类型为int,让数据避免小数点
    df1['搜狗绝对收益'] = df1['搜狗绝对收益'].astype('int64')
    df1['web360绝对收益'] = df1['web360绝对收益'].astype('int64')
    df1['web百度绝对收益'] = df1['web百度绝对收益'].astype('int64')
    warnings.simplefilter("ignore")
    # 限定时间为昨天 并转换为列表套字典
    df1 = df1[yesterday]
    df1 = df1.to_dict('records')

img

img

这是为什么呢

  • 写回答

2条回答 默认 最新

  • 陈年椰子 2022-03-09 15:05
    关注

    1、两段代码都打印点看看。看看格式有没有啥不同,

    print(df['日期'].head())
    
    print(df_all['ta'].head())
    

    2、是否真的没有 ‘2022-03-07’ 的数据?

    评论

报告相同问题?

问题事件

  • 创建了问题 3月9日

悬赏问题

  • ¥20 遥感植被物候指数空间分布图制作
  • ¥15 安装了xlrd库但是import不了…
  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制
  • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
  • ¥50 paddleocr最下面一行似乎无法识别
  • ¥15 求某类社交网络数据集
  • ¥15 靶向捕获探针方法/参考文献
  • ¥15 很抱歉出现错误word不能启动(24),如何解决?