Je souhaite générer un tableau avec plusieurs lignes d'en-têtes comme celui ci-dessous au format CSV.
Je publierai l'article sous forme de mémorandum.
MultiIndex
to_csv
de DataFramedata
du constructeur DataFrame
.df = pandas.DataFrame({
("Alice","Math"): [80,81],
("Alice","English"): [90,91],
("Bob","Math"): [70,71]
})
print(df)
# Alice Bob
# Math English Math
# 0 80 90 70
# 1 81 91 71
print(df.columns)
# MultiIndex([('Alice', 'Math'),
# ('Alice', 'English'),
# ( 'Bob', 'Math')],
# )
MultiIndex
à l'argument columns
du constructeur DataFrame
index = pandas.MultiIndex.from_tuples([
("Alice","Math"),
("Alice","English"),
("Bob","Math")
])
df2 = pandas.DataFrame([[80,90,70],[81,91,71]], columns=index)
print(df2)
# Alice Bob
# Math English Math
# 0 80 90 70
# 1 81 91 71
print(df2.columns)
# MultiIndex([('Alice', 'Math'),
# ('Alice', 'English'),
# ( 'Bob', 'Math')],
# )
data
du constructeur DataFrame
Si l'argument du constructeur columns
est None, le type de la propriété columns
sera ʻIndex` et il ne sera pas possible de sortir avec un en-tête multiligne.
df3 = pandas.DataFrame(
[
{("Alice","Math"):80, ("Alice","English"):90,("Bob","Math"):70},
{("Alice","Math"):81, ("Alice","English"):91,("Bob","Math"):71},
]
)
print(df3)
# (Alice, Math) (Alice, English) (Bob, Math)
# 0 80 90 70
# 1 81 91 71
print(df3.columns)
# Index([('Alice', 'Math'), ('Alice', 'English'), ('Bob', 'Math')], dtype='object')
Vous pouvez générer un en-tête multiligne en passant «MultiIndex» dans l'argument «colonnes».
index = pandas.MultiIndex.from_tuples([
("Alice","Math"),
("Alice","English"),
("Bob","Math")
])
df3 = pandas.DataFrame(
[
{("Alice","Math"):80, ("Alice","English"):90,("Bob","Math"):70},
{("Alice","Math"):81, ("Alice","English"):91,("Bob","Math"):71},
]
,columns=index
)
print(df3)
# Alice Bob
# Math English Math
# 0 80 90 70
# 1 81 91 71
to_csv
de DataFramedf.to_csv("foo.csv", index=False)
foo.csv
Alice,Alice,Bob
Math,English,Math
80,90,70
81,91,71
Recommended Posts