Fringe81 Adventskalender 2019, Artikel zum 12. Tag.
Dieses Mal werde ich eine kleine Geschichte schreiben, die Leute, die nur Python berührt haben (wie ich), in der Praxis brauchen werden. Wie der Titel schon sagt, handelt es sich um eine Geschichte, wenn Daten als JSON-Datei an einen Frontingenieur übergeben werden, nachdem die Daten mit Python komprimiert wurden.
Zum Beispiel möchte ich einen Bildschirm erstellen, um mich neuen Mitarbeitern vorzustellen! Angenommen, Sie möchten zu diesem Zeitpunkt Daten in der folgenden Form (alle Daten sind wie eine CSV-Datei, daher wird davon ausgegangen, dass sie individuell sind).
interface Member {
id: string;
name: string;
profile: {
age: number;
height: number;
weight: number:
};
likes: {
name: string;
reason: string;
}[];
}[];
Ich denke, dass Neulinge, die nur Python verwenden können, dies mit Pandas organisieren und ausgeben können. Bereiten Sie zuerst die Daten vor.
import pandas as pd
#Bei den folgenden Daten wird davon ausgegangen, dass eine separate Datei vorhanden ist, die dem von Pandas gelesenen Status entspricht
df1 = pd.DataFrame(
{
"id": ["01", "02", "03"],
"name": ["Herr A.", "Herr B.", "Herr C."]
}
)
df2 = pd.DataFrame(
{
"id": ["01", "02", "03"],
"age": [22, 24, 27],
"height": [177, 171, 167],
"weight": [64, 57, 62]
}
)
df3 = pd.DataFrame(
{
"id": ["01", "02", "03"],
"name": ["Sushi / Golf", "Baseball / Kamera", "Ente, Dorfbewohner, Krieger"],
"reason": ["Weil es köstlich und erfrischend ist", "", ""]
}
)
df1
id | name | |
---|---|---|
0 | 01 |
df2
id | age | height | weight | |
---|---|---|---|---|
0 | 01 | 22 | 177 | 64 |
1 | 02 | 24 | 171 | 57 |
2 | 03 | 27 | 167 | 62 |
df3
id | name | reason | ||||
---|---|---|---|---|---|---|
0 | 01 | Der Inhalt der Daten ist so, weil sie süß, nett und cool sind.A td> | B td> | C td> | Sushi / Golf td> | Weil es köstlich und cool ist td> |
1 | 02 | Baseball / Kamera td> | Weil es aufregend ist und ich es in meinem Gedächtnis behalten möchte td> | |||
2 | 03 | Ente / Dorfbewohner / Krieger td> | Weil es süß ist, weil es nett ist, weil es cool ist td> |
Als nächstes werden wir die Daten formatieren. Formen Sie es vorerst und kombinieren Sie es zu einem Datenrahmen.
#df2-Formgebung
# "profile"Geben Sie in der Spalte ein, was im Wörterbuch zusammengefasst ist
df2["profile"] = df2.apply(lambda row: {"age": row["age"], "height": row["height"], "weight": row["weight"]}, axis=1)
df2 = df2[["id", "profile"]]
#df3-formung
#Teilen Sie den durch "・" getrennten Text und fügen Sie ihn in einen Listentyp ein
# "likes"Geben Sie in der Spalte ein, was im Wörterbuch zusammengefasst ist
df3["name"] = df3["name"].str.split("・")
df3["reason"] = df3["reason"].str.split("・")
df3["likes"] = df3.apply(lambda row: [{"name": name, "reason": reason} for name, reason in zip(row["name"], row["reason"])], axis=1)
df3 = df3[["id", "likes"]]
#Daten kombinieren
df = df1.merge(df2, on="id").merge(df3, on="id")
Der Inhalt ist so.
df
id | name | profile | likes | |
---|---|---|---|---|
0 | 01 | Herr A td> | {'age': 22, 'height': 177, 'weight': 64} | [{'name': 'sushi', 'reason': 'weil es köstlich ist'}, {'name': '... td> |
1 | 02 | Herr B td> | {'age': 24, 'height': 171, 'weight': 57} | [{'Name': 'Baseball', 'Grund': 'Weil es aufgeregt wird'}, {'Name': ... td> |
2 | 03 | Herr C td> | {'age': 27, 'height': 167, 'weight': 62} | [{'name': 'duck', 'reason': 'weil es süß ist'}, {'name': ... td> |
Zum Schluss schreiben Sie die Daten in eine JSON-Datei.
import json
#Erstellen Sie ein Diktat für die Ausgabe
#orient ist so eingestellt, dass die verschachtelte Struktur in der Liste so gespeichert werden kann, wie sie ist (das Argument hier ist wichtig).
output = df.to_dict(orient="records")
#Öffnen Sie die Speicherzieldatei und geben Sie die Daten ein.
with open("introduction.json", "w") as f:
#Einzug wird so eingestellt, dass der Inhalt der Datei leicht zu sehen ist
# ensure_ascii soll verstümmelte japanische Schriftzeichen verhindern
json.dump(output, f, indent=4, ensure_ascii=False)
Der Inhalt sollte übrigens so aussehen.
output
[{'id': '01',
'name': 'Mr. A', 'profile': {'age': 22, 'height': 177, 'weight': 64}, 'mag': [{'name': 'sushi', 'grund': 'weil es lecker ist'}, {'name': 'Golf', 'reason': 'Weil ich verrückt bin'}]}, {'id': '02', 'Name': 'Herr B', 'profile': {'age': 24, 'height': 171, 'weight': 57}, 'mag': [{'name': 'baseball', 'grund': 'weil es aufgeregt wird'}, {'name': 'camera', 'reason': 'weil ich mich erinnern möchte'}]}, {'id': '03', 'Name': 'C-san', 'profile': {'age': 27, 'height': 167, 'weight': 62}, 'mag': [{'name': 'duck', 'reason': 'weil es süß ist'}, {'Name': 'Dorfbewohner', 'Grund': 'Weil es nett ist'}, {'name': 'krieger', 'grund': 'weil es cool ist'}]}]
das ist alles. Abgesehen davon ist es vielleicht einfacher, nur den Diktattyp zusammenzustellen, aber dieses Mal habe ich eine Methode geschrieben, um das, was im Pandas-Datenrahmen gelesen wurde, so zu konvertieren, wie es ist.
Vielen Dank für das Lesen bis zum Ende. Das nächste Mal ist Designer mirinrin! Bitte genießen Sie weiterhin den Fringe 81 Adventskalender 2019.
Recommended Posts