Hallo.
Kürzlich berühre ich auch ** Python **.
Um die Effizienz der internen Abläufe zu verbessern, versuchen wir nun, den Zahlungsanwendungsprozess zu automatisieren, den die Buchhaltung manuell mit Excel und CSV mit ** Python ** ausführt.
Ich verwende ** openpyxl ** für Excel-Operationen und ** Pandas ** für die Datenverarbeitung, aber ich habe immer noch Probleme mit ** Pandas **, und wenn es ** C # ** ist, wird der Code sofort getötet. Ich kämpfe auch mit dem Montageprozess.
Ich werde einen solchen Kampf anstelle eines Memos aufschreiben.
Klicken Sie hier für dieses Memo.
Es mag einen Tsukkomi geben, der sagt: "So einfach ist das!", Aber ich habe verschiedene Dinge ausprobiert, also werde ich es mir notieren.
Als ich nachgeschlagen habe, wie eine Zeile in einem DataFrame gelöscht werden kann, habe ich eine Funktion namens ** drop ** gefunden. [Offiziell] pandas.DataFrame.drop
Die Verwendung ist wie folgt. Geben Sie die Indexnummer des DataFrame an und löschen Sie sie.
import pandas as pd
#Excel-Datei lesen
data_frame = pd.read_excel('{Excel-Dateipfad}', sheet_name='{Blattname}', header=0)
#10. Zeile(Index=9)Löschen
data_frame.drop(9)
#6. Zeile(Index=5)Und Zeile 8(Index=7)Löschen
data_frame.drop([5,7])
#2. Zeile(Index=1)5. Zeile von(Index=4)Löschen
data_frame.drop(range(1,4))
Diesmal, wie der Titel schon sagt, "** Daten löschen, deren Geschäftspartner mit XX beginnt und Beschreibung mit △△ ** beginnt" und Zeilen löschen, die mehrere Bedingungen erfüllen.
Zu diesem Zweck ist es erforderlich, die Indexnummer zu erhalten, die die Bedingungen erfüllt.
Als ich nachgeschlagen habe, wie man die Indexnummer eines DataFrame erhält, habe ich eine Funktion namens ** index ** gefunden. [Offiziell] pandas.DataFrame.index
Die Verwendung ist wie folgt.
#Holen Sie sich den Index, der der Bedingung entspricht
drop_index = data_frame.index[data_frame['Lieferanten'] == '〇〇']
#Index löschen, der der Bedingung entspricht
data_frame = data_frame.drop(drop_index)
Ja, ich konnte die Daten von "** Kunden sind 〇〇 **" ordnungsgemäß löschen. Als nächstes erhöhen wir die Bedingungen.
#Holen Sie sich einen Index, der mehreren Bedingungen entspricht
drop_index = data_frame.index[(data_frame['Lieferanten'] == '〇〇') & (data_frame['Beschreibung'] == '△△*****')]
#Index löschen, der der Bedingung entspricht
data_frame = data_frame.drop(drop_index)
Okay, die Daten der beiden Bedingungen können gelöscht werden! : Hmm? Ich habe etwas vergessen ... Die zweite Bedingung war ein Präfix-Match ... Ich weiß nicht ...
Versuchen Sie vorerst, die Präfixübereinstimmung ** beginnt mit **.
#Versuchen Sie die Präfixübereinstimmung mit beginnt mit DataFrame ...
drop_index = data_frame.index[(data_frame['Lieferanten'] == '〇〇') & (data_frame['Beschreibung'].startswith('△△'))]
【Ergebnis】
Error:'Series' object has no attribute 'startswith'
"** Serie ** hat nicht ** beginnt mit **!" War wütend.
Pandas verfügt über einen Accessor (Zugriffsmethode), der Zeichenfolgen mit dem Namen ** str ** verarbeiten kann, sowie über eine ** startwith ** -Funktion, die durch Präfixübereinstimmung extrahiert werden kann. [Offiziell] pandas.Series.str.startswith
Versuchen Sie es mit ** str.startswith **.
#Präfix-Übereinstimmungsbedingung mit startwith des str-Accessors von DataFrame hinzugefügt
drop_index = data_frame.index[(data_frame['Lieferanten'] == '〇〇') & (data_frame['Beschreibung'].str.startswith('△△'))]
#Index löschen, der der Bedingung entspricht
data_frame = data_frame.drop(drop_index)
gut gemacht! Ich konnte die Daten von zwei Bedingungen richtig löschen!
Ich möchte sagen: "Das ist es!" Als wir zu der oben genannten Methode kamen, haben wir sie tatsächlich auf eine andere Weise implementiert.
#Schleife bis zur maximalen Anzahl von Zeilen im DataFrame
for i in range(len(data_frame)):
#Spannfutter mit angegebenen Spalten- und Zeilenwerten
if data_frame['Lieferanten'][i] == '〇〇' and data_frame['Beschreibung'][i].startswith('△△'):
#Löschen Sie die Indexnummer, die der Bedingung entspricht
data_frame = data_frame.drop(i)
Es ist ein bisschen analog, aber es durchläuft die Anzahl der Datenzeilen und verarbeitet jede einzelne. Diese Methode kann auch die Daten von zwei Bedingungen ordnungsgemäß löschen.
Es gibt viele andere Methoden, aber dieses Mal habe ich die Methode vorgestellt, die ich tatsächlich ausprobiert habe. Das ist es.
Nächstes Mal werde ich posten, wo ich mit ** openpyxl ** und ** pandas ** zu kämpfen habe.
Vielen Dank, dass Sie so weit gelesen haben.
Recommended Posts