Python 熊猫X何时删除维度?我如何强制它删除/不删除维度?
有时我看到Python 熊猫X何时删除维度?我如何强制它删除/不删除维度?,python,pandas,Python,Pandas,有时我看到xs会从数据帧返回一个序列,如果返回的只是一行,有时则不是。如何强制它发生/不发生?(可能与……有关) 在这里,它返回一行数据帧,而不是一个序列 df2 = pd.DataFrame({'a':['a1','a2','a3'], 'b':['b1','b1','b1'], 'c':[1,1,1], 'value':np.random.randint(0,100,3)}) d
xs
会从数据帧返回一个序列,如果返回的只是一行,有时则不是。如何强制它发生/不发生?(可能与……有关)
在这里,它返回一行数据帧,而不是一个序列
df2 = pd.DataFrame({'a':['a1','a2','a3'],
'b':['b1','b1','b1'],
'c':[1,1,1],
'value':np.random.randint(0,100,3)})
df2.set_index(['a','b','c'], inplace=True)
df2.sortlevel(inplace = True)
df2.xs(('a1','b1',1))
value 30
Name: (a1, b1, 1), dtype: int64
在这种情况下,只返回序列
使现代化
我的同事刚刚发现,如果df的长度很大,它将返回一个数据帧,否则,它将返回一个序列
n=25
df = pd.DataFrame({'a':np.append(np.random.randint(0,10,n), -1),
'b':np.append(np.random.randint(0,10,n), -1),
'c':np.append(np.random.randint(0,10,n), -1),
'value':np.random.randint(0,100,n+1)})
df.set_index(['a','b','c'], inplace=True)
df.sortlevel(inplace = True)
display(df.xs((-1,-1,-1), drop_level=True))
df.index.get_loc((-1,-1,-1))
n
的边界甚至不一致,这可能是由于指数中有许多不同的值
但是,结果是序列还是数据帧取决于ifget\u loc
返回0或切片(0,1,无)
此外,如果键不在索引中,get\u loc
有时会抛出keyrerror
异常,有时会返回Slice(0,0,无)
错误报告已存档 好的,它们都是定义的行为。所以我有责任处理它。可能是一个bug,请在githubI文件上提交一份报告,然后它就关闭了。在github上提出问题似乎没有意义。您提交的问题与drop level无法使用完全指定的索引器的问题完全不同-这可能是一个错误-您提交的不是我结束了您的问题,因为您仍然没有解释您实际在做什么-
n=25
df = pd.DataFrame({'a':np.append(np.random.randint(0,10,n), -1),
'b':np.append(np.random.randint(0,10,n), -1),
'c':np.append(np.random.randint(0,10,n), -1),
'value':np.random.randint(0,100,n+1)})
df.set_index(['a','b','c'], inplace=True)
df.sortlevel(inplace = True)
display(df.xs((-1,-1,-1), drop_level=True))
df.index.get_loc((-1,-1,-1))