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

Python pandas提取每日首条/聚合同日期数据及报错解决

报错原因

触发AttributeError: Can only use .str accessor with string values!是因为你通过x.date()生成的Time列是Python原生date类型,不是字符串类型,无法调用.str字符串处理接口,完全没必要用正则提取日期,属于多走了弯路。

最优实现流程

第一步:规范加载JSON数据

你的JSON是嵌套结构,加载时直接扁平化处理,从根源避免多级列名带来的冗余操作:

import pandas as pd
import json

# 替换为你的JSON文件实际路径
with open("nft_floor_data.json", "r", encoding="utf-8") as f:
    raw = json.load(f)

# 直接生成绘图用的标准基础表
df = pd.DataFrame({
    "datetime": pd.to_datetime(raw["data"]["date"]),
    "Floor Price (ETH)": raw["data"]["datasets"]
})

第二步:二选一完成日维度聚合

两种逻辑都不需要额外生成字符串日期列,直接用pandas datetime类型自带的.dt.date接口按天分组即可。

  • 方案1:提取每日首条记录
# 取每日第一条数据,要取最后一条把.first()换成.last()即可
df_daily = df.groupby(df["datetime"].dt.date, as_index=False).first()
df_daily = df_daily.rename(columns={"datetime": "Date"})
  • 方案2:按日计算价格均值
df_daily = df.groupby(df["datetime"].dt.date, as_index=False).agg({
    "Floor Price (ETH)": "mean"
})
df_daily = df_daily.rename(columns={"datetime": "Date"})
原有代码修正版

如果你不想调整现有数据加载逻辑,保留原有data.date、data.datasets列结构,直接删掉冗余的正则提取步骤即可:

df["data.date"] = pd.to_datetime(df["data.date"])

# 首条记录逻辑
df_daily = df.groupby(df["data.date"].dt.date, as_index=False).agg(
    Date=("data.date", "first"),
    "Floor Price (ETH)": ("data.datasets", "first")
).reset_index(drop=True)

# 均值逻辑替换agg内规则即可
# df_daily = df.groupby(df["data.date"].dt.date, as_index=False).agg(
#     Date=("data.date", "first"),
#     "Floor Price (ETH)": ("data.datasets", "mean")
# ).reset_index(drop=True)

最终输出的表只有Date、Floor Price (ETH)两列,可直接传入任意Python绘图库绘制折线图、柱状图,无需额外格式转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:16:01