Ich habe Bankaussagen sowohl in Excel- als auch in CSV -Formaten. Die Header können je nach Bank oder Dateixport geringfügig variieren, zum Beispiel: < /p>
TRAN_DATE, CHQNO, PARTICULARS, DR, CR, BAL, SOL
< /code>
Ich möchte diese Spaltennamen auf konsistente Namen wie: < /p>
normalisieren.{
"TRAN_DATE": "transaction_date",
"DR": "debit_amount",
"CR": "credit_amount",
"PARTICULARS": "narration",
"CHQNO": "cheque_no",
...
}
< /code>
Ich habe eine Funktion geschrieben, um die Header -Zeile dynamisch zu erkennen: < /p>
def detect_header(self, df_raw, min_match=2, min_cols=3, max_scan=200):
normalized_mapping = {self.normalize_header(k): v for k, v in COLUMN_MAPPING.items()}
valid_headers = set(normalized_mapping.keys())
df_raw = df_raw.fillna("")
for idx in range(min(len(df_raw), max_scan)):
row = df_raw.iloc[idx].tolist()
split_row = []
for c in row:
if isinstance(c, str) and "," in c:
split_row.extend([x.strip() for x in c.split(",") if x.strip()])
elif isinstance(c, str) and c.strip():
split_row.append(c.strip())
values = [self.normalize_header(c) for c in split_row]
matches = [v for v in values if v in valid_headers]
if len(matches) >= 4:
new_cols = [normalized_mapping.get(self.normalize_header(c), c) for c in split_row]
df = df_raw.iloc[idx+1:].reset_index(drop=True)
if len(df.columns) < len(new_cols):
for i in range(len(new_cols) - len(df.columns)):
df[i + df.shape[1]] = ""
df.columns = new_cols
df = df.replace("", pd.NA).dropna(how="all").dropna(axis=1, how="all")
print(f"✅ Detected header at row {idx}: {df.columns.tolist()}")
return df
print("⚠️ No valid header found in sheet")
return None
Meine Fragen sind:
Gibt es eine einfachere oder effizientere Möglichkeit, die Header für CSV/Excel -Dateien dynamisch umzubenennen, bei denen die Header möglicherweise nach ein paar Metadata -Zeilen erscheinen können. str.lower (). strip () oder gibt es eine robustere Methode für Bankaussagen mit unterschiedlichen Spaltennamen?>
Ich habe Bankaussagen sowohl in Excel- als auch in CSV -Formaten. Die Header können je nach Bank oder Dateixport geringfügig variieren, zum Beispiel: < /p> [code]TRAN_DATE, CHQNO, PARTICULARS, DR, CR, BAL, SOL < /code> Ich möchte diese Spaltennamen auf konsistente Namen wie: < /p> normalisieren.{ "TRAN_DATE": "transaction_date", "DR": "debit_amount", "CR": "credit_amount", "PARTICULARS": "narration", "CHQNO": "cheque_no", ... } < /code> Ich habe eine Funktion geschrieben, um die Header -Zeile dynamisch zu erkennen: < /p> def detect_header(self, df_raw, min_match=2, min_cols=3, max_scan=200): normalized_mapping = {self.normalize_header(k): v for k, v in COLUMN_MAPPING.items()} valid_headers = set(normalized_mapping.keys())
df_raw = df_raw.fillna("")
for idx in range(min(len(df_raw), max_scan)): row = df_raw.iloc[idx].tolist() split_row = [] for c in row: if isinstance(c, str) and "," in c: split_row.extend([x.strip() for x in c.split(",") if x.strip()]) elif isinstance(c, str) and c.strip(): split_row.append(c.strip())
values = [self.normalize_header(c) for c in split_row] matches = [v for v in values if v in valid_headers]
if len(matches) >= 4: new_cols = [normalized_mapping.get(self.normalize_header(c), c) for c in split_row] df = df_raw.iloc[idx+1:].reset_index(drop=True) if len(df.columns) < len(new_cols): for i in range(len(new_cols) - len(df.columns)): df[i + df.shape[1]] = "" df.columns = new_cols df = df.replace("", pd.NA).dropna(how="all").dropna(axis=1, how="all") print(f"✅ Detected header at row {idx}: {df.columns.tolist()}") return df
print("⚠️ No valid header found in sheet") return None [/code] Meine Fragen sind: Gibt es eine einfachere oder effizientere Möglichkeit, die Header für CSV/Excel -Dateien dynamisch umzubenennen, bei denen die Header möglicherweise nach ein paar Metadata -Zeilen erscheinen können. str.lower (). strip () oder gibt es eine robustere Methode für Bankaussagen mit unterschiedlichen Spaltennamen?>
Ich bin sehr neu in Python. Bitte lassen Sie sich nicht missfallen, wenn ich etwas verpasst habe. Infolgedessen kann ein Class -CLS nicht erkennen, welche Datenstrukturen dafür erstellt wurden, damit...
Ich habe diesen Beitrag gefunden, der anfangs genau das war, wonach ich gesucht habe, aber er hat mir nicht geholfen:
Hinzufügen von Header und Fußzeile zu JSON -Ausgabe von Python
Ich habe eine CSV...
Ich habe einen Datenrahmen, der vier Spalten enthält, die keine Beschriftung haben (sie sind also df ,df , df und df basierend auf der Position).
Ich muss die Spaltennamen anhand der Daten...
Ich muss die Nummer des seriellen Ports und den Steckplatz der SIM-Bank zuordnen.
Meine SIM-Bank verfügt über 256 Steckplätze (8 Ports, 32 Steckplätze) und 8 serielle Ports sind an jedem Port der Box...