LogViewer
2025-07-20 04:00:01 | INFO | data_prepare::345 - {'action': 'data_prepare', 'status': 'started'}
2025-07-20 04:00:01 | INFO | data_prepare:gen_daily_data:230 - {'action': 'gen_daily_data', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:gen_daily_data:236 - {'action': 'connect_client', 'status': 'success'}
2025-07-20 04:00:05 | INFO | data_prepare:gen_daily_data:238 - {'action': 'fetch_meta_mapping', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:gen_daily_data:251 - {'action': 'get_trading_day_path', 'status': 'attempt'}
2025-07-20 04:00:05 | INFO | data_prepare:get_trading_day_path:64 - {'action': 'get_trading_day_path', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_trading_day_path:110 - {'action': 'get_trading_day_path', 'status': 'completed', 'path': '/root/data/Research1//daily_data//2025-07-18/'}
2025-07-20 04:00:05 | INFO | data_prepare:gen_daily_data:254 - {'action': 'fetch_data', 'status': 'started', 'category': 'basic_trading'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'switch', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'switch', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'history_factor', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'history_factor', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'volume', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'volume', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'settle', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'settle', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'pre_settle', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'pre_settle', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'contract', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'contract', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'factor_multiply', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'factor_multiply', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'close', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'close', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'opencol', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'opencol', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'turnover', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'turnover', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'high', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'high', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'low', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'low', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'open_interest', 'status': 'started'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'open_interest', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:05 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'near_contract_price', 'status': 'started'}
2025-07-20 04:00:07 | INFO | data_prepare:get_and_save_daily_data:131 - {'action': 'process_data', 'file': 'near_contract_price', 'last_date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:07 | WARNING | data_prepare:get_and_save_daily_data:133 - {'file': 'near_contract_price', 'date': '2025-07-17 00:00:00+08:00', 'latest_trading_day': '2025-07-18', 'status': 'last_date_mismatch'}
2025-07-20 04:00:07 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'near_contract_price', 'status': 'completed', 'date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:07 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'dominant_contract_price', 'status': 'started'}
2025-07-20 04:00:09 | INFO | data_prepare:get_and_save_daily_data:131 - {'action': 'process_data', 'file': 'dominant_contract_price', 'last_date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:09 | WARNING | data_prepare:get_and_save_daily_data:133 - {'file': 'dominant_contract_price', 'date': '2025-07-17 00:00:00+08:00', 'latest_trading_day': '2025-07-18', 'status': 'last_date_mismatch'}
2025-07-20 04:00:09 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'dominant_contract_price', 'status': 'completed', 'date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:09 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'near_basis', 'status': 'started'}
2025-07-20 04:00:10 | INFO | data_prepare:get_and_save_daily_data:131 - {'action': 'process_data', 'file': 'near_basis', 'last_date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:10 | WARNING | data_prepare:get_and_save_daily_data:133 - {'file': 'near_basis', 'date': '2025-07-17 00:00:00+08:00', 'latest_trading_day': '2025-07-18', 'status': 'last_date_mismatch'}
2025-07-20 04:00:10 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'near_basis', 'status': 'completed', 'date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:10 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'dom_basis', 'status': 'started'}
2025-07-20 04:00:12 | INFO | data_prepare:get_and_save_daily_data:131 - {'action': 'process_data', 'file': 'dom_basis', 'last_date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:12 | WARNING | data_prepare:get_and_save_daily_data:133 - {'file': 'dom_basis', 'date': '2025-07-17 00:00:00+08:00', 'latest_trading_day': '2025-07-18', 'status': 'last_date_mismatch'}
2025-07-20 04:00:12 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'dom_basis', 'status': 'completed', 'date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:12 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'near_basis_rate', 'status': 'started'}
2025-07-20 04:00:13 | INFO | data_prepare:get_and_save_daily_data:131 - {'action': 'process_data', 'file': 'near_basis_rate', 'last_date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:13 | WARNING | data_prepare:get_and_save_daily_data:133 - {'file': 'near_basis_rate', 'date': '2025-07-17 00:00:00+08:00', 'latest_trading_day': '2025-07-18', 'status': 'last_date_mismatch'}
2025-07-20 04:00:13 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'near_basis_rate', 'status': 'completed', 'date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:13 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'dom_basis_rate', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:131 - {'action': 'process_data', 'file': 'dom_basis_rate', 'last_date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:15 | WARNING | data_prepare:get_and_save_daily_data:133 - {'file': 'dom_basis_rate', 'date': '2025-07-17 00:00:00+08:00', 'latest_trading_day': '2025-07-18', 'status': 'last_date_mismatch'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'dom_basis_rate', 'status': 'completed', 'date': '2025-07-17 00:00:00+08:00'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'long_hld', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'long_hld', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'long_chg', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'long_chg', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'short_hld', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'short_hld', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'short_chg', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'short_chg', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'vol', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'vol', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'vol_chg', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'vol_chg', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'maturity_month', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'maturity_month', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'maturity_day', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'maturity_day', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'contract_yymm', 'status': 'started'}
2025-07-20 04:00:15 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'contract_yymm', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:165 - {'action': 'get_save_reset_data', 'file': 'long_margin_rate_amount', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:218 - {'action': 'get_save_reset_data', 'file': 'long_margin_rate_amount', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:165 - {'action': 'get_save_reset_data', 'file': 'contract_multiplier', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:218 - {'action': 'get_save_reset_data', 'file': 'contract_multiplier', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:165 - {'action': 'get_save_reset_data', 'file': 'open_position_rate_amount', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:218 - {'action': 'get_save_reset_data', 'file': 'open_position_rate_amount', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:165 - {'action': 'get_save_reset_data', 'file': 'open_position_fee_per_hand', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:218 - {'action': 'get_save_reset_data', 'file': 'open_position_fee_per_hand', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:165 - {'action': 'get_save_reset_data', 'file': 'close_position_rate_amount', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:218 - {'action': 'get_save_reset_data', 'file': 'close_position_rate_amount', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:165 - {'action': 'get_save_reset_data', 'file': 'close_position_fee_per_hand', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:218 - {'action': 'get_save_reset_data', 'file': 'close_position_fee_per_hand', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:165 - {'action': 'get_save_reset_data', 'file': 'close_today_rate_amount', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:218 - {'action': 'get_save_reset_data', 'file': 'close_today_rate_amount', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:165 - {'action': 'get_save_reset_data', 'file': 'close_today_fee_per_hand', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:218 - {'action': 'get_save_reset_data', 'file': 'close_today_fee_per_hand', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:165 - {'action': 'get_save_reset_data', 'file': 'min_price_movement', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_and_reset_daily_data:218 - {'action': 'get_save_reset_data', 'file': 'min_price_movement', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:gen_daily_data:301 - {'action': 'calculate_atr', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'high,low,pre_settle', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'high,low,pre_settle', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:gen_daily_data:325 - {'action': 'calculate_adjusted_data', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'contract', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'contract', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'factor_multiply', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'factor_multiply', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'close', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'close', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'opencol', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'opencol', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:120 - {'action': 'get_save_data', 'file': 'turnover', 'status': 'started'}
2025-07-20 04:00:16 | INFO | data_prepare:get_and_save_daily_data:155 - {'action': 'get_save_data', 'file': 'turnover', 'status': 'completed', 'date': '2025-07-18 00:00:00+08:00'}
2025-07-20 04:00:16 | INFO | data_prepare:gen_daily_data:336 - {'action': 'gen_daily_data', 'status': 'completed'}
2025-07-20 04:00:16 | INFO | data_prepare:generate_and_save_dicts:27 - {'action': 'generate_dicts', 'status': 'started'}
2025-07-20 04:00:16 | CRITICAL | data_prepare::352 - {'action': 'data_prepare', 'status': 'failed', 'error': "'未分类'"}
2025-07-20 04:00:16 | ERROR | data_prepare::353 - 数据预处理过程中发生严重错误
Traceback (most recent call last):

> File "/root/project/auto/auto/data_prepare.py", line 349, in 
    COMD_DICT, SECTOR_DICT, EXCHANGE_DICT = generate_and_save_dicts()
                                            └ 

  File "/root/project/auto/auto/data_prepare.py", line 47, in generate_and_save_dicts
    sector_dict = meta_mapping['sector'].apply(lambda x: sector_range[x]).to_dict()
                  │                                      └ {'Agriculture': 0, 'Ferrous': 1, 'Finance': 2, 'Energy': 3, 'Precious': 4, 'NonFerrous': 5}
                  └        id comd_name exchange       sector
                    comd                                     
                    AP      1        苹果     CZCE  Agriculture...

  File "/usr/local/lib/python3.10/site-packages/pandas/core/series.py", line 4935, in apply
    ).apply()
  File "/usr/local/lib/python3.10/site-packages/pandas/core/apply.py", line 1422, in apply
    return self.apply_standard()
           │    └ 
  File "/usr/local/lib/python3.10/site-packages/pandas/core/apply.py", line 1502, in apply_standard
    mapped = obj._map_values(
             │   └ 
             └ comd
               AP    Agriculture
               CF    Agriculture
               CJ    Agriculture
               CY    Agriculture
               FG        Ferrous
                        ...     
               PR         E...
  File "/usr/local/lib/python3.10/site-packages/pandas/core/base.py", line 925, in _map_values
    return algorithms.map_array(arr, mapper, na_action=na_action, convert=convert)
           │          │         │    │                 │                  └ True
           │          │         │    │                 └ None
           │          │         │    └ . at 0x7fb7c87af2e0>
           │          │         └ array(['Agriculture', 'Agriculture', 'Agriculture', 'Agriculture',
           │          │                  'Ferrous', 'Finance', 'Finance', 'Finance', 'Financ...
           │          └ 
  File "/usr/local/lib/python3.10/site-packages/pandas/core/algorithms.py", line 1743, in map_array
    return lib.map_infer(values, mapper, convert=convert)
           │   │         │       │               └ True
           │   │         │       └ . at 0x7fb7c87af2e0>
           │   │         └ array(['Agriculture', 'Agriculture', 'Agriculture', 'Agriculture',
           │   │                  'Ferrous', 'Finance', 'Finance', 'Finance', 'Financ...
           │   └ 
  File "pandas/_libs/lib.pyx", line 2999, in pandas._libs.lib.map_infer

  File "/root/project/auto/auto/data_prepare.py", line 47, in 
    sector_dict = meta_mapping['sector'].apply(lambda x: sector_range[x]).to_dict()
                                                      │  │            └ '未分类'
                                                      │  └ {'Agriculture': 0, 'Ferrous': 1, 'Finance': 2, 'Energy': 3, 'Precious': 4, 'NonFerrous': 5}
                                                      └ '未分类'

KeyError: '未分类'
2025-07-20 04:00:16 | INFO | data_prepare::355 - {'action': 'data_prepare', 'status': 'completed'}
future_1d/future_spot/near_contract_price
select date, comd, near_contract_price from future_spot 
future_1d/future_spot/dominant_contract_price
select date, comd, dominant_contract_price from future_spot 
future_1d/future_spot/near_basis
select date, comd, near_basis from future_spot 
future_1d/future_spot/dom_basis
select date, comd, dom_basis from future_spot 
future_1d/future_spot/near_basis_rate
select date, comd, near_basis_rate from future_spot 
future_1d/future_spot/dom_basis_rate
select date, comd, dom_basis_rate from future_spot