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 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 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...
In einer Reihen- oder df-Spalte möchte ich die Anzahl der Werte zählen, die in vordefinierte Bins passen (einfach) und die Bin-Werte sinnvoll beschriften (Problem).
import pandas as pd