diff --git a/core/datasource/flask_server.py b/core/datasource/flask_server.py index 83217f8..d9874f7 100644 --- a/core/datasource/flask_server.py +++ b/core/datasource/flask_server.py @@ -205,12 +205,29 @@ def dataframe_to_json(df: pd.DataFrame) -> Dict: # 重置索引,将日期转为列 df_reset = df.reset_index() - # 处理日期列 - if 'date' in df_reset.columns: - df_reset['date'] = df_reset['date'].dt.strftime('%Y-%m-%d') - elif 'index' in df_reset.columns: - df_reset['index'] = pd.to_datetime(df_reset['index']).dt.strftime('%Y-%m-%d') - df_reset = df_reset.rename(columns={'index': 'date'}) + # 处理日期列(支持多种可能的列名) + date_columns = ['date', 'Date', 'index', 'trade_date', 'datetime'] + for col in date_columns: + if col in df_reset.columns: + try: + df_reset[col] = pd.to_datetime(df_reset[col]).dt.strftime('%Y-%m-%d') + # 统一重命名为 'date' + if col != 'date': + df_reset = df_reset.rename(columns={col: 'date'}) + break + except Exception: + pass + + # 确保所有数据都是 JSON 可序列化的 + for col in df_reset.columns: + if df_reset[col].dtype == 'object': + # 转换可能的 Timestamp 对象 + try: + df_reset[col] = df_reset[col].apply( + lambda x: x.strftime('%Y-%m-%d') if hasattr(x, 'strftime') else x + ) + except Exception: + pass # 转换为字典列表 records = df_reset.to_dict(orient='records') @@ -220,8 +237,8 @@ def dataframe_to_json(df: pd.DataFrame) -> Dict: "count": len(records), "columns": list(df_reset.columns), "date_range": { - "start": df.index.min().strftime('%Y-%m-%d'), - "end": df.index.max().strftime('%Y-%m-%d'), + "start": df.index.min().strftime('%Y-%m-%d') if hasattr(df.index.min(), 'strftime') else str(df.index.min()), + "end": df.index.max().strftime('%Y-%m-%d') if hasattr(df.index.max(), 'strftime') else str(df.index.max()), } if len(df) > 0 else None }