I have a data frame that is given this initial construct:
df_data = pd.DataFrame(columns=['name','date','c1','c2']).set_index(['name','date'])
I then have code to fill this frame from a data base. I can print some or all of the frame and get a sensible result. Something like:
print df_data.c1.head(3)
name date
Joe 2019-01-01 234324
2019-01-02 4565
2019-01-03 573
Name: c1, dtype: object
After filling from the data base, I have various analysis calculations that try to access the data using loc
as, for example, df_data.loc['Joe', 'c1']
I expect to get a result from from that with date for an index and the values of column c1
, where the "name" part of the multiindex has been selected down to 'Joe'. Something like:
print df_data.loc['Joe', 'c1']
date
2019-01-01 234324
2019-01-02 4565
2019-01-03 573
Name: c1, type: object
I've run this three times, filling the frame with different ranges of date. Two of the three work as expected and described above. In the third, I get KeyError: ('Joe', 'c1')
for df_data.loc['Joe', 'c1']
but, even in this "broken" case, I get a perfectly nice result for df_data.loc['Joe'].c1
, which I think should give the same answer in this case. I can also print the entire frame df_data
and get a perfectly sensible result. I interpret the KeyError
here to mean that Pandas thinks that c1
should be in the index rather than it giving a column name.
I cannot reproduce this in a stand-alone example as, for reasons I cannot understand, the result seems to depend on the data in the frame rather than structure of the frame. (Same structure "works" for two of three cases.) So specific questions:
loc['Joe', 'c1']
cause c1
to be treated as part of the key instead of a column name? (Whatever other error I may have, I don't see where the second argument here should be interpreted as part of the key under any documented scenario, e.g. I do not have something like loc[('Joe','c1')]
.)Use tuple notation: df_data.loc[('Joe', 'c1')]
. See: https://pandas.pydata.org/docs/user_guide/advanced.html#advanced-indexing-with-hierarchical-index
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