非标业绩提报、合伙人结算登记字段时间分区修改
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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=["订单登记表"])
|
||||
|
||||
@@ -345,6 +345,10 @@ class RenewalToDo:
|
||||
data_NGV['60天自动流转时间'] = data_NGV['过期日'] - pd.Timedelta(days=30)
|
||||
data_NGV['30天自动流转时间'] = data_NGV['过期日'] - pd.Timedelta(days=0)
|
||||
data_NGV['0天自动流转时间'] = data_NGV['过期日'] + pd.Timedelta(days=90)
|
||||
|
||||
data_NGV['120天是否跟进'] = "自动"
|
||||
data_NGV['60天是否跟进']= "自动"
|
||||
data_NGV['30天是否跟进']= "自动"
|
||||
# 格式化为字符串(去掉时区)
|
||||
for col in ['过期日', '120天自动流转时间', '60天自动流转时间', '30天自动流转时间', '0天自动流转时间']:
|
||||
data_NGV[col] = data_NGV[col].dt.strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
Reference in New Issue
Block a user