I have a .csv file that looks like this:
Male, Male, Male, Female, Female R, R, L, R, R .86, .67, .88, .78, .81
I want to read that into a df, so that I have:
Male Female R L R 0 .86 .67 .88 .78 .81
I did:
df = pd.read_csv('file.csv', header=[0,1])
But headers
does not cut it. Which results in
Empty DataFrame Columns: [(Male, R), (Male, R), (Male, L), (Female, R), (Female, R)] Index: []
Yet, the docs on headers says:
(...)Can be a list of integers that specify row locations for a multi-index on the columns E.g. [0,1,3]
What am I doing wrong? How can I possibly make it work?
pandas MultiIndex to ColumnsUse pandas DataFrame. reset_index() function to convert/transfer MultiIndex (multi-level index) indexes to columns. The default setting for the parameter is drop=False which will keep the index values as columns and set the new index to DataFrame starting from zero. Yields below output.
You can slice a MultiIndex by providing multiple indexers. You can provide any of the selectors as if you are indexing by label, see Selection by Label, including slices, lists of labels, labels, and boolean indexers. You can use slice(None) to select all the contents of that level.
I think the problem is that you have duplicated columns: two ( Female, R).
Not sure whether it's a bug or the duplicated columns are unacceptable. Here's a workaround for you:
In [61]: df = pd.read_csv('test.csv', header=[0, 1], skipinitialspace=True, tupleize_cols=True) In [62]: df Out[62]: (Male, R) (Male, R) (Male, L) (Female, R) (Female, R) 0 0.67 0.67 0.88 0.81 0.81 [1 rows x 5 columns]
In [63]: df.columns = pd.MultiIndex.from_tuples(df.columns) In [64]: df Out[64]: Male Female R R L R R 0 0.67 0.67 0.88 0.81 0.81 [1 rows x 5 columns]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With