使IPython选项卡完成分层数据帧
IPython的一个有用特性是它的制表符完成功能,除此之外,它不需要记忆使IPython选项卡完成分层数据帧,python,pandas,ipython,Python,Pandas,Ipython,IPython的一个有用特性是它的制表符完成功能,除此之外,它不需要记忆pandas.DataFrame列名 例如,假设我们有 df = pd.DataFrame({'bar': [1, 2], 'baz': [3, 4], 'bap': [5, 6]}) 给出dfas bap bar baz 0 5 1 3 1 6 2 4 bap foo bar baz 0 5 1 3 1 6 2 4 然后我们就可以打字了
pandas.DataFrame
列名
例如,假设我们有
df = pd.DataFrame({'bar': [1, 2], 'baz': [3, 4], 'bap': [5, 6]})
给出df
as
bap bar baz
0 5 1 3
1 6 2 4
bap foo
bar baz
0 5 1 3
1 6 2 4
然后我们就可以打字了
df.<Tab>
给出df
as
bap bar baz
0 5 1 3
1 6 2 4
bap foo
bar baz
0 5 1 3
1 6 2 4
然后df.
将不会自动完成bap
或foo
什么是让它工作的正确方法?我已经写了一个hack,它可以做到这一点(下面的答案),但我对它依赖于。欢迎其他答案。应用以下猴子贴片似乎可以消除问题的症状:
_orig_dir = getattr(pd.DataFrame, '__dir__')
def _mutilevel_aware_dir(df):
multilevels = [tup for tup in df.columns if isinstance(tup, tuple)]
return _orig_dir(df) + [tup[0] for tup in multilevels]
setattr(pd.DataFrame, '__dir__', _mutilevel_aware_dir)
_orig_get_attr = getattr(pd.DataFrame, '__getattr__')
def _mutilevel_aware_getattr(df, name):
return _orig_get_attr(df, name)
setattr(pd.DataFrame, '__getattr__', _mutilevel_aware_getattr)
IPython显然间接地使用了数据帧
的方法进行自动完成。
第一个函数在内部扫描元组,如果遇到元组,则将其第一个元素作为“伪”成员返回。第二个函数获取\uuuu getattr\uuu
,用于处理访问此类伪成员时将返回的内容
把这些东西补到课堂上似乎很管用。然而,这是一个相当暴力的解决方案,它可能有副作用,我不知道