Calendrier de l'Avent Fringe81 2019, article du 12ème jour.
Cette fois, j'écrirai une petite histoire dont les gens qui n'ont touché que Python (comme moi) auront besoin en pratique. Comme le titre l'indique, il s'agit d'une histoire lors de la transmission de données sous forme de fichier JSON à un ingénieur avant après avoir compressé les données avec Python.
Par exemple, je veux créer un écran pour me présenter aux nouveaux employés! À ce stade, supposons que vous souhaitiez des données sous la forme suivante (chaque donnée est comme un fichier CSV, on suppose donc qu'elles sont individuelles).
interface Member {
id: string;
name: string;
profile: {
age: number;
height: number;
weight: number:
};
likes: {
name: string;
reason: string;
}[];
}[];
Je pense que les nouveaux arrivants qui ne peuvent utiliser que Python peuvent organiser cela avec des pandas et le sortir. Préparez d'abord les données.
import pandas as pd
#Les données suivantes supposent qu'il existe un fichier séparé et qu'il correspond à l'état lu par les pandas
df1 = pd.DataFrame(
{
"id": ["01", "02", "03"],
"name": ["Monsieur A", "Monsieur B", "Monsieur 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 / caméra", "Canard, villageois, guerrier"],
"reason": ["Parce que c'est délicieux et c'est rafraîchissant", "Parce que c'est excitant et je veux le garder dans ma mémoire", "Parce que c'est mignon, c'est gentil, c'est cool"]
}
)
Le contenu des données ressemble à ceci.
df1
id | name | |
---|---|---|
0 | 01 | M. A td> |
1 | 02 | M. B td> |
2 | 03 | M. C td> |
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 | Sushi / Golf td> | Parce que c'est délicieux et rafraîchissant td> |
1 | 02 | Baseball / Caméra td> | Parce que c'est excitant et que je veux le garder dans ma mémoire td> |
2 | 03 | Canard / Villageois / Guerrier td> | Parce que c'est mignon, parce que c'est gentil, parce que c'est cool td> |
Ensuite, nous formaterons les données. Pour le moment, façonnez-le et combinez-le en un seul bloc de données.
#mise en forme df2
# "profile"Entrez ce qui est résumé dans le dictionnaire dans la colonne
df2["profile"] = df2.apply(lambda row: {"age": row["age"], "height": row["height"], "weight": row["weight"]}, axis=1)
df2 = df2[["id", "profile"]]
#mise en forme df3
#Divisez le texte séparé par "・" et incluez-le dans un type de liste
# "likes"Entrez ce qui est résumé dans le dictionnaire dans la colonne
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"]]
#Combiner des données
df = df1.merge(df2, on="id").merge(df3, on="id")
Le contenu est comme ça.
df
id | name | profile | likes | |
---|---|---|---|---|
0 | 01 | M. A td> | {'age': 22, 'height': 177, 'weight': 64} | [{'name': 'sushi', 'reason': 'parce que c'est délicieux'}, {'name': '... td> |
1 | 02 | M. B td> | {'age': 24, 'height': 171, 'weight': 57} | [{'name': 'baseball', 'reason': 'parce que ça s'excite'}, {'name': ... td> |
2 | 03 | M. C td> | {'age': 27, 'height': 167, 'weight': 62} | [{'nom': 'canard', 'raison': 'parce que c'est mignon'}, {'nom': ... td> |
Enfin, écrivez les données dans un fichier JSON.
import json
#Créer un dict pour la sortie
#orient est défini de manière à ce que la structure imbriquée dans la liste puisse être enregistrée telle quelle (l'argument ici est important)
output = df.to_dict(orient="records")
#Ouvrez le fichier de destination d'enregistrement et saisissez les données.
with open("introduction.json", "w") as f:
#l'indentation est définie de sorte que le contenu du fichier soit facile à voir
# ensure_ascii est configuré pour empêcher les caractères japonais déformés
json.dump(output, f, indent=4, ensure_ascii=False)
Au fait, le contenu devrait ressembler à ceci.
output
[{'id': '01',
'nom': 'M. A', 'profile': {'age': 22, 'height': 177, 'weight': 64}, 'likes': [{'name': 'sushi', 'reason': 'parce que c'est délicieux'}, {'name': 'Golf', 'reason': 'Parce que je suis fou'}]}, {'id': '02', 'nom': 'M. B', 'profile': {'age': 24, 'height': 171, 'weight': 57}, 'likes': [{'name': 'baseball', 'reason': 'parce que ça excite'}, {'name': 'camera', 'reason': 'parce que je veux me souvenir'}]}, {'id': '03', 'nom': 'C-san', 'profile': {'age': 27, 'height': 167, 'weight': 62}, 'aime': [{'nom': 'canard', 'raison': 'parce que c'est mignon'}, {'name': 'villageager', 'reason': 'parce que c'est gentil'}, {'name': 'warrior', 'reason': 'parce que c'est cool'}]}]
c'est tout. En dehors de cela, il peut être plus facile de le mettre en place uniquement avec le type dict, mais cette fois j'ai écrit une méthode pour convertir ce qui a été lu dans le cadre de données pandas tel quel.
Merci d'avoir lu jusqu'au bout. La prochaine fois, c'est le designer mirinrin! Continuez à profiter du calendrier de l'Avent Fringe 81 2019.
Recommended Posts