[英]Get column names including index name from pandas data frame
假设我们有一个数据框,其中的索引可能有一个名称:
df = pd.DataFrame({'a':[1,2,3],'b':[3,6,1], 'c':[2,6,0]})
df = df.set_index(['a'])
b c
a
1 3 2
2 6 6
获取包含索引名称(如果存在)的列名称的最佳方法是什么。
在这种情况下,调用df.columns.tolist()
不包含索引名称并返回['b', 'c']
,我想获得['a', 'b', 'c']
。
可以为呼叫临时重置索引:
df.reset_index().columns.tolist()
如果空索引名称不会出现在列表中,请reset_index()
执行reset_index()
:
(df.reset_index() if df.index.name else df).columns.tolist()
对于通用解决方案,如果不存在index.name
则需要过滤器None
:
df = pd.DataFrame({'a':[1,2,3],'b':[3,6,1], 'c':[2,6,0]})
print ([df.index.name] + df.columns.tolist())
[None, 'a', 'b', 'c']
c = list(filter(None, [df.index.name] + df.columns.tolist()))
print (c)
['a', 'b', 'c']
df = df.set_index(['a'])
c = list(filter(None, [df.index.name] + df.columns.tolist()))
print (c)
['a', 'b', 'c']
numpy.insert
和difference
另一个解决方案:
c = np.insert(df.columns, 0, df.index.name).difference([None]).tolist()
print (c)
['a', 'b', 'c']
通过reset_index
提升索引后,您可以使用带filter
list
:
res = list(filter(None, df.reset_index()))
print(res)
['a', 'b', 'c']
我认为对于更新版本的熊猫,这个答案可能更简洁:
names = list(filter(None, df.index.names + df.columns.values.tolist()))
这适用于无索引、单列索引或多索引。 它避免了调用 reset_index() ,因为这样一个简单的操作会对性能造成不必要的影响。
我想,你是从 group by operation 中得到的,我想如果是这样的话,你需要在最后添加 reset_index() 以通过常规方法获取列名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.