Un de mes amis qui travaille pour une société médicale m'a demandé de convertir une grande quantité de données longues en données larges. Dans ce secteur, les données telles que les patients sont souvent représentées dans un format large. J'ai donc créé un outil de conversion pour python, donc je l'ai écrit sous forme d'article.
Ci-dessous, l'image de conversion
Avant la conversion
ID,data,item,
0,100,BPS,
0,200,LDL,
1,20,YBY,
2,XXX,YYY,
2,AAA,BBB,
Après la conversion
ID YBY BBB BPS LDL YYY
0 N/A N/A 100 200 N/A
1 20 N/A N/A N/A N/A
2 N/A AAA N/A N/A XXX
J'ai donc créé un outil en utilisant des pandas. L'outil créé est le suivant.
import pandas as pd
import csv
csv_file = open("sample.csv", "r",
encoding="ms932", errors="", newline="")
f = csv.reader(csv_file, delimiter=",", doublequote=True,
lineterminator="\r\n", quotechar='"', skipinitialspace=True)
columns = next(f)
data = []
for row in f:
data.append(row)
df = pd.DataFrame(data, columns=columns)
df_t = df.pivot_table(values=[columns[1]], index=[columns[0]], columns=[
columns[2]], aggfunc='sum', fill_value='N/A')
df_t.to_excel('out.xlsx', index=True)
Lisez sample.csv, convertissez-le en données de type large et exportez-le vers Excel. En principe, il y a trois colonnes csv. Créez une ligne pour chaque ID, et plus il y a d'éléments, plus de colonnes seront ajoutées. Ensuite, les données sont définies pour chaque valeur. S'il n'y a pas de données, N / A sera défini.
Résultat de sortie
Si vous souhaitez convertir CSV du type long au type large, veuillez vous référer à cette implémentation. La source est également publiée sur le Github suivant. https://github.com/kurihiro0119/transform_wide_long
Recommended Posts