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