[PYTHON] Memorandum (Pseudo-Vlookup von Pandas)

Einführung

https://qiita.com/wellwell3176/items/e6a17609c7398dd7d496

Das oben erstellte Programm wurde verbessert, daher werde ich es zusammenfassen.

** Geben Sie es nicht in Excel ein, sondern berechnen Sie einfach alles in Python und werfen Sie nur das Ergebnis in Excel, oder? ** **.

Mir ist aufgefallen, dass es zu natürlich war, daher habe ich das Gefühl, dass es ziemlich kompakt geworden ist. Ich habe bisher openpyxl verwendet, aber diesmal habe ich Pandas verwendet. Der Unterschied zwischen den beiden ist immer noch nicht gut verstanden.

9/30 postscript: Im Kommentarbereich präsentierte @nkay eine ausgefeiltere Methode als diese Methode, daher werde ich sie veröffentlichen. Die Ausgabe ist nahezu gleich (zusätzlich wird zusätzlich die Spalte "Kategorie + Geschäft" generiert).

Vorschlagsmethode


import pandas as pd

df_master = pd.read_excel('/content/drive/My Drive/Colab Notebooks/table.xlsx')
df_test = pd.read_excel('/content/drive/My Drive/Colab Notebooks/data5.xlsx')

out = df_test.merge(df_master, on=['Einstufung', 'Unternehmen'], how='left')
out.to_excel('/content/drive/My Drive/Colab Notebooks/data6.xlsx', index=False)

Ergebnis

image.png Abbildung: Excel ausgeben (später farbcodiert) Dies ist gut, da die Elemente, die Einstellung 1 und Einstellung 2 entsprechen, durchsucht und aus der Klassifizierung + Geschäftsinhalt ausgegeben werden können. Es gibt keine unnötigen Zeilen, die zum Zeitpunkt der endgültigen Einreichung nicht erforderlich sind, und es wird aktualisiert. https://qiita.com/wellwell3176/items/e6a17609c7398dd7d496 Im Vergleich zu Abb. 2 in sehen Sie deutlich, dass der Ausgang auf einem nutzbaren Niveau liegt.

program


import pandas as pd
df_master=pd.read_excel('/content/drive/My Drive/Colab Notebooks/table.xlsx')
df_test=pd.read_excel('/content/drive/My Drive/Colab Notebooks/data5.xlsx')

row_count=len(df_test.index)  #Rufen Sie die Tabellenlänge ab, um die Anzahl der Schleifen in der for-Anweisung zu bestimmen

for i in range(0,row_count): #.iterrows funktionierte aus irgendeinem Grund nicht
  kubun = df_test.at[(i,"Einstufung")]
  gyomu = df_test.at[(i,"Unternehmen")]
  kubun_gyomu=(df_master['Einstufung'] == kubun) & (df_master["Unternehmen"] == gyomu) #EinstufungとUnternehmenが一致する行をBoolで判定

  row_true=df_master[kubun_gyomu] #Extrahieren Sie nur echte Zeilen aus dem Datenrahmen
  set1_val=row_true.iat[0,3]
  set2_val=row_true.iat[0,4] #Einstellung 1/Da die Position von 2 eindeutig bestimmt wird, geben Sie die Position numerisch an. Ich konnte so etwas wie die Spalte "Einstellung 2" in der 0. Zeile nicht ausführen.
#Ich habe das Gefühl, dass es zu viele Variablen gibt, aber wenn ich es nicht so stark teile, scheint es, dass das, was ich später mache, erfrischend sein wird, also habe ich es geteilt.

  df_test.at[(i,"Einstellung 1")]=set1_val 
  df_test.at[(i,"Einstellung 2")]=set2_val #こっちの指定はi行目”Einstellung 2”列が可能。よく分からん。

df_test.to_excel('/content/drive/My Drive/Colab Notebooks/data6.xlsx',index=False)

Fehlermeldungen und Fehler, die ich während der Erstellung gesehen habe

ValueError: At based indexing on an integer index can only have integer indexers

python


for i in df_test.iterrows():
  kubun = df_test.at[(i,"Einstufung")]
  gyomu = df_test.at[(i,"Unternehmen")]

-->ValueError: At based indexing on an integer index can only have integer indexers
 #i=[0]Von[Anzahl der letzten Zeilen im Datenrahmen]Ich dachte, dass es durch Angabe funktionieren würde, aber es ist nutzlos
 #Der Grund ist noch unbekannt. Es scheint, dass ich keinen ganzzahligen Wert enthält ...
 #Gelöst durch Angabe der Länge mit der Bereichsfunktion wie das fertige Produkt

**. Schlüsselfehler bei Verwendung bei [0, "hogehoge"] **

Version fehlgeschlagen


for i in range(0,45):
  kubun = df_test.at[(i,"Einstufung")] #テストファイルからEinstufungの値を引っ張り出す
  kubun_correct=(df_master['Einstufung'] == kubun) #Suchen Sie nach Master-Datei und Hook
  row_true=df_master[kubun_correct] #Ziehen Sie nur die wahre Linie heraus
  set1_val=row_true.at[0,"Einstellung 1"] #Ich wurde hier beim Versuch erwischt, die Daten der ersten Zeile "Einstellung 1" auszugeben, die true ausgegeben hat
  df_test.at[(i,"Einstellung 1")]=set1_val  #Ich wollte die Daten der entsprechenden Einstellung 1 in Excel ersetzen

-->key error 0
#Die Ursache ist.Ich verstehe nicht, dass at eine Zeichenfolgenreferenz ist. ich=Bei 10 ist ein Fehler aufgetreten (Klassifizierung = Konstruktion).
#Zu diesem Zeitpunkt drucken(kubun_correct)Das Ergebnis von
0     False
1     False
2      True
3      True
#print(row_true)Dann wird es wie folgt sein
Kategorie Geschäftseinstellung 1 Einstellung 2
2 Bau Wochentag Regular B Süd
3 Bau Urlaub unregelmäßig B Nord
#Zu diesem Zeitpunkt rudern_true.at[0,"Einstellung 1"]は、”0”行の”Einstellung 1”列を読み込みに行くが、0行はあるものの"0"Kann nicht referenziert werden, da keine Zeile vorhanden ist
#Daher wie ein fertiges Produkt.Wird durch Verweisen auf 0 Zeilen und 3 Spalten mit iat behoben

Verweise

So erhalten Sie den Zellenwert von Pandas DataFrame https://www.delftstack.com/ja/howto/python-pandas/how-to-get-a-value-from-a-cell-of-a-dataframe/ So extrahieren Sie nur den Wert aus den von Pandas extrahierten Daten https://tipstour.net/python-pandas-get-value Extrahieren (Auswählen) von Zeilen aus UND, ODER, NICHT aus mehreren Bedingungen mit Pandas https://note.nkmk.me/python-pandas-multiple-conditions/

Recommended Posts

Memorandum (Pseudo-Vlookup von Pandas)
Memorandum of Pandas
Pandas Memorandum
Pandas Operations Memorandum
Nach Pandas sortieren
[Zur Aufnahme] Pandas Memorandum
pandas Matplotlib Zusammenfassung nach Verwendung
Standardisieren Sie nach Gruppen mit Pandas
Visualisierungsnotiz von Pandas, Seaborn
Memorandum @ Python ODER Seminar: Pandas
Bearbeiten von Strings mit Pandas gruppieren nach
Feature-Generierung mit Pandas gruppieren nach