从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]