Wie kann man mit Python und Pandas die Header in einem Bank -Erklärung CSV/Excel dynamisch umbenennen?Python

Python-Programme
Anonymous
 Wie kann man mit Python und Pandas die Header in einem Bank -Erklärung CSV/Excel dynamisch umbenennen?

Post by Anonymous »

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: Select all

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?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post