从pythonpandas的列名检索列索引

在R中,当您需要根据列的名称检索列索引时,您可以执行此操作

idx <- which(names(my_data)==my_colum_name) 

有没有办法与pandas数据框一样?

当然,你可以使用.get_loc()

 In [45]: df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]}) In [46]: df.columns Out[46]: Index([apple, orange, pear], dtype=object) In [47]: df.columns.get_loc("pear") Out[47]: 2 

虽然说实话我自己并不经常需要这个。 ( df["pear"]df[["apple", "orange"]]或者df.columns.isin(["orange", "pear"]) ) ,尽pipe我可以肯定地看到你想要索引号的情况。

帝斯曼的解决scheme的工作原理,但如果你想直接相当于你可以做(df.columns == name).nonzero()

当您可能希望查找多个列匹配项时,可以使用使用searchsearchsorted方法的vector化解决scheme。 因此,以df作为数据框和query_cols作为要search的列名称,实现将是 –

 def column_index(df, query_cols): cols = df.columns.values sidx = np.argsort(cols) return sidx[np.searchsorted(cols,query_cols,sorter=sidx)] 

样品运行 –

 In [162]: df Out[162]: apple banana pear orange peach 0 8 3 4 4 2 1 4 4 3 0 1 2 1 2 6 8 1 In [163]: column_index(df, ['peach', 'banana', 'apple']) Out[163]: array([4, 1, 0]) 

这是通过列表理解的解决scheme。 cols是获取索引的列的列表:

 [df.columns.get_loc(c) for c in df.columns if c in cols]