为列命名,然后使用名称而非索引调用项目

0 投票
3 回答
4936 浏览
提问于 2025-04-15 15:21

我有一份需要分析的列的列表。与其每次都用具体的索引,比如 data[1][2],我想给某一列起个名字,然后在处理不同任务时循环遍历这列的行。请问我该如何给一列命名,然后用什么格式来引用它呢?

for x in range (len(data)):  
    if [column_name][x] .... 

3 个回答

0

我觉得你想做的是把一列数据存到一个变量里,然后在需要的时候引用这个变量,而不是每次都用下标去访问。其实这很简单:

varName=data[columnName]

之后如果要访问那一列数据,使用 varName[rowName] 就可以了。

2

使用名字而不是数字来访问你的数据,最简单的方法就是用字典。

data = {'pig':[1, 2], 'cow':[3, 4], 'dog':[5,6]}

if data in range(2):
    if data['dog'][1]==4:...

当然还有其他方法。例如,你可以创建一个类并重写 __getitem__ 方法;或者你可以直接给二维数组的列号分配变量名,比如 dog=2,等等;具体选择哪种方法,取决于你想要做什么。

3

有很多种方法可以做到这一点。如果你在写代码的时候就知道名字和列之间的关系,最简单的方法就是这样:

for row in data:
   (foo, bar, baz, bat) = row

...假设你不需要更新 row(和 data)。

如果你需要更新这一行,直接把值复制到变量里就不行了。你需要通过索引来操作这些项目。在这种情况下,aviraldg 的方法是最简单的:

(foo, bar, baz, bat) = range(4)
for row in data:
   row[foo] = row[bar]

如果你想用一个包含列名的 字符串 来引用这些列,你需要把这一行复制到一个字典里,字典的键是列名。然后,当你完成对字典的操作后,你需要更新原来的列表,或者用一个新的列表替换它(这就是这段代码的作用):

columns = ("foo", "bar", "baz", "bat")
for i in range(len(data)):
   d = dict(zip(columns, data[i]))
   d["foo"] = d["bar"]
   data[i] = [d[col] for col in columns]

撰写回答