繁体   English   中英

从 Pandas 数据框中获取列名,包括索引名

[英]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.insertdifference另一个解决方案:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM