如何使用数字位置索引访问datum中的列(替代列名方式)?
用数字索引访问datum列的可行方法
取决于你的datum是什么数据类型,下面分场景给出解决方案:
场景1:datum是Pandas DataFrame/Series
如果是Pandas的结构,直接用内置的iloc方法就能按位置索引访问:
- 取DataFrame的第N列(索引从0开始):
datum.iloc[:, 1](这里的1对应第二列) - 如果是单行的Series对象,直接用
datum.iloc[1]就能取到第2个位置的元素
要是你特别想让datum[1]这种写法生效,可以把DataFrame的列名替换成数字:
datum.columns = range(len(datum.columns))
之后datum[1]就可以直接访问对应列了,但这种方式会丢失原列名信息,按需使用。
场景2:datum是自定义类实例
如果datum是你自己定义的类,给它实现__getitem__方法就能支持数字索引:
class Datum: def __init__(self, col_values, col_names): # 按顺序存储列值,同时保留原列名属性 self._col_values = col_values for name, val in zip(col_names, col_values): setattr(self, name, val) def __getitem__(self, idx): # 处理数字索引 return self._col_values[idx]
实例化后,datum[1]就能直接返回对应位置的列值,同时也能继续用datum.ColumnName访问。
场景3:datum是普通字典(用datum['ColumnName']访问)
Python 3.7+的字典是有序的,你可以直接把值转成列表后按索引取:
list(datum.values())[1]
如果是Python 3.6及以下版本,需要用collections.OrderedDict来保证顺序,之后同样用list(datum.values())[1]访问。
内容的提问来源于stack exchange,提问作者VladB
相关产品推荐
相关产品推荐

