【问题标题】:Create List of Dict: python / pandas创建字典列表:python / pandas
【发布时间】:2020-07-22 15:29:18
【问题描述】:

我从一个用 Pandas 读取的 Excel 导入。每一行是一个不同的人,列给出了 people_id 等值。

现在我实际上想将每个人放入一个字典,然后将每个字典放入一个列表。但不幸的是,我的循环总是返回同一个人,但在列表中出现了 19 次。错在哪里?

path = os.path.abspath('dataset_people.xlsx') # works as long as file is in same directory as this code. Excel-file must be closed.
excel = pandas.read_excel(path)# excel is now a variable which contains the files contet. 
#print(excel) #print whole content.

# set dictionary
people = {}

# set list
list_people = []

# loop dictionary
for index, row in excel.iterrows():
    add1 = row['people_id']
    add2 = row['timestamp']
    add3 = row['floor_departure']
    add4 = row['floor_destination']
    people['people_id'] = add1
    people['timestamp'] = add2
    people['floor_departure'] = add3
    people['floor_destination'] = add4

# loop list
for index, row in excel.iterrows():
    list_people.append(people)

print(list_people)

【问题讨论】:

  • 找不到代码有什么问题。你试过excel.to_dict()
  • 是的,我做了,似乎有一个值错误:要解压的值太多

标签: pandas list loops dictionary


【解决方案1】:

如果我正确理解了这个问题,您必须在完成某人的 dict 条目后,在第一个循环中附加到 list_people。在第一个循环中,您读取第一行,将有关此人的所有信息存储在该行中,然后传递到下一行,覆盖您刚刚阅读的行的 people dict 中的内容。所以最后你只在字典中存储了数据框中最后一个人的信息。

for index, row in excel.iterrows():
    add1 = row['people_id']
    add2 = row['timestamp']
    add3 = row['floor_departure']
    add4 = row['floor_destination']
    people['people_id'] = add1
    people['timestamp'] = add2
    people['floor_departure'] = add3
    people['floor_destination'] = add4
    list_people.append(people)

这样的循环应该可以完成您需要的工作。这样,每个人都在一个字典中,然后将其添加到列表中。如果这是您正在寻找的解决方案,我建议您调用字典 person 而不是 people,而是在列表中表示。

【讨论】:

  • 感谢您的帮助。不幸的是,它仍然无法正常工作。我仍然得到这个: [{'people_id': 19, 'timestamp': Timestamp('2020-04-08 06:19:00'), 'floor_departuretamp('2020-04-08 06:19:00'), 'floor_departure': 5, 'floor_destination': 4}, {'peopeparture': 5, 'floor_destination': 4}, {'people_id': 19, 'timestamp': Timestamp('2stamp('2020-04-08 06 :19:00'), 'floor_departure': 5, 'floor_destination': 4}, {'peodeparture': 5, 'floor_destination': 4},...]
  • 您应该澄清您的问题:从这个打印看来,数据存在一些问题,因为在存储在列表中的第二个字典中没有 people_id 值和循环中指定的其他值。尝试在您的问题中的循环(print excel.head(10))之前打印前 10 行 excel,然后根据字典列表更好地指定您想要获得的结果。
  • 好吧,我自己找到了问题。您需要将 dict 放入循环中。然后就可以了。
  • 好的,我将正确缩进我的答案。很抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 2018-05-27
  • 2020-11-17
  • 2018-04-27
相关资源
最近更新 更多