I try to follow this link pandas dataframe with 2-rows header and export to csv in order for me to created extra header without remove the original header, below is my coding:
df.columns = pd.MultiIndex.from_tuples((zip(df.columns,[uniquevaluesfirstcolumnww, '', uniquevaluesfirstcolumnww1, ' ',uniquevaluesfirstcolumnww2, ' '])))I get the error such as this: object of type 'zip' has no len()
Anyone have any idea? even though I try to add list before zip but fail also.
I think problem is zip return object in python 3, so need convert to list:
df.columns = pd.MultiIndex.from_tuples((list(zip(df.columns,[uniquevaluesfirstcolumnww, '', uniquevaluesfirstcolumnww1, ' ',uniquevaluesfirstcolumnww2, ' ']))))
But is seems you need MultiIndex.from_arrays:
cols = list('abcdef')
df = pd.DataFrame([[1,1,1,1,1,1]], columns=cols)
print (df)
a b c d e f
0 1 1 1 1 1 1
uniquevaluesfirstcolumnww = 'r'
uniquevaluesfirstcolumnww1 = 's'
uniquevaluesfirstcolumnww2 = 't'
vals = [uniquevaluesfirstcolumnww, '',
uniquevaluesfirstcolumnww1, ' ',
uniquevaluesfirstcolumnww2, ' ']
df.columns = pd.MultiIndex.from_arrays([df.columns, vals])
print (df)
a b c d e f
r s t
0 1 1 1 1 1 1
If columns have MultiIndex also:
cols = pd.MultiIndex.from_product([['a','b','c'], ['x','y']])
df = pd.DataFrame([[1,1,1,1,1,1]], columns=cols)
print (df)
a b c
x y x y x y
0 1 1 1 1 1 1
uniquevaluesfirstcolumnww = 'r'
uniquevaluesfirstcolumnww1 = 's'
uniquevaluesfirstcolumnww2 = 't'
vals = [uniquevaluesfirstcolumnww, '',
uniquevaluesfirstcolumnww1, ' ',
uniquevaluesfirstcolumnww2, ' ']
df.columns = pd.MultiIndex.from_arrays([df.columns.get_level_values(0),
df.columns.get_level_values(1),
vals])
print (df)
a b c
x y x y x y
r s t
0 1 1 1 1 1 1