#python #pandas
#питон #панды
Вопрос:
У нас есть скрипт для перебора всех путей, а затем перебора всех файлов по этому пути, чтобы получить уникальные значения из всех столбцов всех файлов. Мы использовали itertools и все, чтобы сравнить один и тот же столбец, если существуют одинаковые значения, и получить из него уникальные значения. Я получаю ВФ при разборе ошибка из-за строки «Если тип(эвал(слова) в [‘СТР ‘буль’]», благодаря которому я снял «ивала» и после этого я не получаю «конец файла EOF при разборе ошибка» проблема я столкнулся сейчас, — это несколько объектов столбцы(кроме количества столбцов, такие как int и float), что пропустил, перед удалением оценки и столбцов есть пропущенный кто-нибудь может пожалуйста помочь? я новичок в кодировании
или кто-нибудь может предложить альтернативную логику для этого?
Логические:
import os import pandas as pd import csv import re import itertools def uniques(words): finals = [] for word in set(words): try: word = word.strip() if not type((word)) in [str, bool]: continue else: finals.append(word) except Exception as e: print(e, word) finals.append(word) return finals every_file_columns = {} for report_path in report_paths: files = os.listdir(report_path) for file in files: if not file.endswith(".parquet"): continue print("Report path ",report_path) print("Filename ",file) full_path = os.path.join(report_path, file) df = pd.read_parquet(full_path) for col in df.select_dtypes(include=['object']): try: values = df[col].dropna().unique() values = uniques(values) print(values) except: continue if col not in every_file_columns: every_file_columns[col.upper()] = [] else: print(col, len(every_file_columns[col])) if len(values): # To not add empty lists every_file_columns[col.upper()].append(set(values))
Я заметил, что из этой строки я получаю неожиданный вывод, поэтому в приведенном ниже фрагменте кода должна быть проблема
club_col = {} for col, arrays in every_file_columns.items(): print(arrays) if len(arrays) gt; 1: combinations = itertools.combinations(list(range(len(arrays))), 2) for combination in combinations: index1, index2 = combination intersection = set.intersection(arrays[index1], arrays[index2]) if not len(intersection): if not (index1, col) in club_col: club_col[(index1, col)] = arrays[index1] else: club_col[(index1, col)].union(arrays[index1], arrays[index2]) if not (index2, col) in club_col: club_col[(index2, col)] = arrays[index2] else: club_col[(index2, col)].union(arrays[index1], arrays[index2]) else: if not (index1, col) in club_col: club_col[(index1, col)] = arrays[index1] else: club_col[(index1, col)].union(arrays[index1], arrays[index2]) break
Комментарии:
1. можете ли вы поделиться кодом, который вы пробовали
2. Я добавил сейчас @SubbuVidyaSekar