Обновить dags/OSV.py
This commit is contained in:
parent
c6dcf9d9b6
commit
0e83378d17
54
dags/OSV.py
54
dags/OSV.py
|
|
@ -135,25 +135,41 @@ def read_data_1C(**kwargs):
|
|||
|
||||
df = df.rename(columns=field_mapping)
|
||||
# Удаляем дубликаты по ключевым полям перед вставкой
|
||||
conflict_columns = ['schet', 'uid_subkonto2', 'uid_subkonto1', 'uid_organizaciya', 'get_date', 'subkonto2']
|
||||
|
||||
print(f" Данные перед удалением дубликатов (первые 10 строк):")
|
||||
print(f" Всего строк: {len(df)}")
|
||||
print(f" Ключевые колонки для проверки дубликатов: {conflict_columns}")
|
||||
|
||||
# Выводим первые 10 строк с ключевыми полями
|
||||
if not df.empty:
|
||||
display_columns = conflict_columns + ['summa_oborot', 'nomer'] # Добавляем еще пару полей для информации
|
||||
available_columns = [col for col in display_columns if col in df.columns]
|
||||
# Проверяем наличие дубликатов
|
||||
duplicates = df.duplicated(subset=conflict_columns, keep=False)
|
||||
if duplicates.any():
|
||||
duplicate_count = duplicates.sum()
|
||||
print(f" Найдено дубликатов: {duplicate_count}")
|
||||
print(f" Дата с дубликатами: {date}")
|
||||
print(f" Пример дублирующихся строк:")
|
||||
duplicate_samples = df[duplicates][available_columns].head(10)
|
||||
print(duplicate_samples.to_string(index=False))
|
||||
group_columns = [
|
||||
'schet', 'subkonto1', 'subkonto2', 'organizaciya', 'nomer',
|
||||
'date_begin', 'date_end', 'inn_subkonto1', 'inn_organizaciya',
|
||||
'uid_subkonto2', 'uid_subkonto1', 'uid_organizaciya', 'get_date'
|
||||
]
|
||||
columns_for_sum = [
|
||||
'summa_oborot', 'summa_oborot_dt', 'summa_oborot_kt',
|
||||
'summa_konechnyy_ostatok', 'summa_konechnyy_ostatok_dt', 'summa_konechnyy_ostatok_kt',
|
||||
'summa_konechnyy_razvernutyy_ostatok_dt', 'summa_konechnyy_razvernutyy_ostatok_kt'
|
||||
]
|
||||
sum_columns = {
|
||||
'summa_oborot': 'sum', 'summa_oborot_dt': 'sum', 'summa_oborot_kt': 'sum',
|
||||
'summa_konechnyy_ostatok': 'sum', 'summa_konechnyy_ostatok_dt': 'sum', 'summa_konechnyy_ostatok_kt': 'sum',
|
||||
'summa_konechnyy_razvernutyy_ostatok_dt': 'sum', 'summa_konechnyy_razvernutyy_ostatok_kt': 'sum'
|
||||
}
|
||||
for col in columns_for_sum:
|
||||
if col in df.columns:
|
||||
# Очищаем и преобразуем числовые значения
|
||||
df[col] = (df[col]
|
||||
.str.replace('\xa0', '', regex=False) # Убираем неразрывные пробелы
|
||||
.str.replace(' ', '', regex=False) # Убираем обычные пробелы
|
||||
.str.replace(',', '.', regex=False) # Запятые -> точки для десятичных
|
||||
.apply(lambda x: x if x.replace('.', '').replace('-', '').isdigit() else None)
|
||||
.apply(pd.to_numeric, errors='coerce'))
|
||||
|
||||
# Диагностика
|
||||
original = df[col].copy()
|
||||
cleaned = df[col]
|
||||
failed = cleaned.isna() & original.notna()
|
||||
|
||||
if failed.any():
|
||||
display(f" {col}: не преобразовано {failed.sum()} значений")
|
||||
display(f" Примеры: {original[failed].head(3).tolist()}")
|
||||
|
||||
df = df.groupby(group_columns, as_index=False).agg(sum_columns)
|
||||
|
||||
|
||||
with engine.begin() as conn:
|
||||
|
|
|
|||
Loading…
Reference in New Issue