非标业绩提报、合伙人结算登记字段时间分区修改

This commit is contained in:
z66
2025-12-25 15:35:03 +08:00
parent ab434f6c4c
commit 5e53157a78
4 changed files with 99 additions and 16 deletions
+74
View File
@@ -30,3 +30,77 @@ Traceback (most recent call last):
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\indexes\base.py", line 3819, in get_loc
raise KeyError(key) from err
KeyError: '业务人员'
2025-12-25 14:47:59,066 - log_config.py - error_task_logger - ERROR - 合伙人结算登记同步到BI发生错误:"None of [Index(['订单支付时间'], dtype='object')] are in the [columns]"
Traceback (most recent call last):
File "D:\Idea Project\SaaS_V1.7\back_ground_module\partner_settlement_to_BI.py", line 297, in main
df = self.data_process()
File "D:\Idea Project\SaaS_V1.7\back_ground_module\partner_settlement_to_BI.py", line 165, in data_process
df[time_columns] = df[time_columns].apply(
~~^^^^^^^^^^^^^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\frame.py", line 4113, in __getitem__
indexer = self.columns._get_indexer_strict(key, "columns")[1]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\indexes\base.py", line 6212, in _get_indexer_strict
self._raise_if_missing(keyarr, indexer, axis_name)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\indexes\base.py", line 6261, in _raise_if_missing
raise KeyError(f"None of [{key}] are in the [{axis_name}]")
KeyError: "None of [Index(['订单支付时间'], dtype='object')] are in the [columns]"
2025-12-25 14:48:41,241 - log_config.py - error_task_logger - ERROR - 合伙人结算登记同步到BI发生错误:"None of [Index(['订单登记表.订单支付时间'], dtype='object')] are in the [columns]"
Traceback (most recent call last):
File "D:\Idea Project\SaaS_V1.7\back_ground_module\partner_settlement_to_BI.py", line 297, in main
df = self.data_process()
File "D:\Idea Project\SaaS_V1.7\back_ground_module\partner_settlement_to_BI.py", line 165, in data_process
df[time_columns] = df[time_columns].apply(
~~^^^^^^^^^^^^^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\frame.py", line 4113, in __getitem__
indexer = self.columns._get_indexer_strict(key, "columns")[1]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\indexes\base.py", line 6212, in _get_indexer_strict
self._raise_if_missing(keyarr, indexer, axis_name)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\indexes\base.py", line 6261, in _raise_if_missing
raise KeyError(f"None of [{key}] are in the [{axis_name}]")
KeyError: "None of [Index(['订单登记表.订单支付时间'], dtype='object')] are in the [columns]"
2025-12-25 15:31:38,149 - log_config.py - error_task_logger - ERROR - 非标业绩提报转BI发生错误Already tz-aware, use tz_convert to convert.
Traceback (most recent call last):
File "D:\Idea Project\SaaS_V1.7\back_ground_module\non_standar_performance_to_BI.py", line 287, in main
df = self.data_process()
File "D:\Idea Project\SaaS_V1.7\back_ground_module\non_standar_performance_to_BI.py", line 148, in data_process
df[time_columns] = df[time_columns].apply(
~~~~~~~~~~~~~~~~~~~~~~^
lambda col: pd.to_datetime(col, errors='coerce')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.dt.tz_localize('Asia/Shanghai')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.dt.strftime('%Y-%m-%d %H:%M:%S')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\frame.py", line 10381, in apply
return op.apply().__finalize__(self, method="apply")
~~~~~~~~^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\apply.py", line 916, in apply
return self.apply_standard()
~~~~~~~~~~~~~~~~~~~^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\apply.py", line 1063, in apply_standard
results, res_index = self.apply_series_generator()
~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\apply.py", line 1081, in apply_series_generator
results[i] = self.func(v, *self.args, **self.kwargs)
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Idea Project\SaaS_V1.7\back_ground_module\non_standar_performance_to_BI.py", line 150, in <lambda>
.dt.tz_localize('Asia/Shanghai')
~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\accessor.py", line 112, in f
return self._delegate_method(name, *args, **kwargs)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\indexes\accessors.py", line 132, in _delegate_method
result = method(*args, **kwargs)
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\indexes\datetimes.py", line 293, in tz_localize
arr = self._data.tz_localize(tz, ambiguous, nonexistent)
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\arrays\_mixins.py", line 81, in method
return meth(self, *args, **kwargs)
File "D:\ProgramTools\anaconda3\envs\saas\Lib\site-packages\pandas\core\arrays\datetimes.py", line 1085, in tz_localize
raise TypeError("Already tz-aware, use tz_convert to convert.")
TypeError: Already tz-aware, use tz_convert to convert.
@@ -143,13 +143,17 @@ class NonStandardPerformanceToBI:
df[col] = df[col].map(lambda x: x.get("name", "") if isinstance(x, dict) else "")
# 3.日期字段转为北京时间
time_columns = ["支付日期", "开户/处理日期","提交时间","更新时间","业绩归属月","业绩归属日期"]
time_columns = ["支付日期", "开户/处理日期", "提交时间", "更新时间", "业绩归属月", "业绩归属日期"]
df[time_columns] = df[time_columns].apply(
lambda col: pd.to_datetime(col, errors='coerce')
.dt.tz_localize(None)
.dt.strftime('%Y-%m-%d %H:%M:%S')
)
for col in time_columns:
# 1. 解析为 datetime,并明确指定为 UTC(即使原始字符串无时区)
dt_utc = pd.to_datetime(df[col], errors='coerce', utc=True)
# 2. 转换为北京时间
dt_beijing = dt_utc.dt.tz_convert('Asia/Shanghai')
# 3. 去掉时区信息(变成 naive datetime),然后格式化为字符串
df[col] = dt_beijing.dt.tz_localize(None).dt.strftime('%Y-%m-%d %H:%M:%S')
# 4.处理所有配置的列表字段
if "新签阶段及提成比例" in df.columns:
+11 -10
View File
@@ -139,13 +139,15 @@ class PartnerSettlementToBI:
df[col] = df[col].map(lambda x: x.get("name", "") if isinstance(x, dict) else "")
# 3.日期字段转为北京时间
time_columns = ["提交时间", "更新时间","订单支付时间-核实","结算月份"]
# 3. 日期字段转为北京时间(主表)
time_columns = ["提交时间", "更新时间", "订单支付时间-核实", "结算月份"]
df[time_columns] = df[time_columns].apply(
lambda col: pd.to_datetime(col, errors='coerce')
.dt.tz_localize(None)
.dt.strftime('%Y-%m-%d %H:%M:%S')
)
for col in time_columns:
if col in df.columns:
# 假设原始时间是 UTC(即使字符串无时区)
dt_utc = pd.to_datetime(df[col], errors='coerce', utc=True)
dt_beijing = dt_utc.dt.tz_convert('Asia/Shanghai')
df[col] = dt_beijing.dt.tz_localize(None).dt.strftime('%Y-%m-%d %H:%M:%S')
# 4.处理订单登记表列表字段,将其拆分成多行
if "订单登记表" in df.columns:
@@ -168,12 +170,11 @@ class PartnerSettlementToBI:
time_columns_nested = ["订单支付时间"] # 来自订单登记表等嵌套结构
# 时间字段标准化:处理订单支付时间
for col in time_columns_nested:
if col in df_exploded.columns:
df_exploded[col] = pd.to_datetime(df_exploded[col], errors='coerce') \
.dt.tz_localize(None) \
.dt.strftime('%Y-%m-%d %H:%M:%S')
dt_utc = pd.to_datetime(df_exploded[col], errors='coerce', utc=True)
dt_beijing = dt_utc.dt.tz_convert('Asia/Shanghai')
df_exploded[col] = dt_beijing.dt.tz_localize(None).dt.strftime('%Y-%m-%d %H:%M:%S')
# 删除原始的订单登记表列
df_exploded = df_exploded.drop(columns=["订单登记表"])