【问题标题】:I can't understand why my pd dataframe only returns the last row我不明白为什么我的 pd 数据框只返回最后一行
【发布时间】:2020-08-07 10:21:17
【问题描述】:

我试图把这个字典变成一个 pd 数据框。它应该有 31 行,但它只创建最后一行。这是代码...

for i, n in zip(list(df.actor_id), weighted_avg):
    ziplist = {i:n}
    print(ziplist)

df.actor_id 是来自数据帧的一列字符串,而 weighted_avg 是来自函数的数字列表。

pd.DataFrame(ziplist)'''




【问题讨论】:

  • ziplist 被每次迭代覆盖,因为它是在循环中分配的。就这样做:ziplist = dict(zip(df['actor_id'], weighted_avg))
  • 太棒了,谢谢..我有过度编码的倾向,然后想知道出了什么问题!

标签: pandas list function loops for-loop


【解决方案1】:

我的代码中有类似的东西,首先我有这个数据框

    WIS_REP_ID  DTC_DTC_ID
    2156061     EBS-U0100-87
    2156061     TGW-B1502-81
    2156061     TGW-B1002-13
    2053897     EMS-P203F-00
    2053897     EMS-P2BA7-00
...

然后我有一个整数列表,我想添加为索引:

weighted_avg = [0,1,2,3,4,5,6,7,8,9]

在这种情况下,我的 df 更大,所以我使用 head 方法仅获取前 10 个值,然后通过仅打印我感兴趣的行的值来验证:

dfactor_id= (DTCSheet.head(10))
print (dfactor_id["DTC_DTC_ID"])

​应用相同的循环:

for i, n in zip(list(dfactor_id["DTC_DTC_ID"]), weighted_avg):
    ziplist = {i:n}
    print(ziplist)

输出将是:

{'EBS-U0100-87': 0}
{'TGW-B1502-81': 1}
{'TGW-B1002-13': 2}
{'EMS-P203F-00': 3}
{'EMS-P2BA7-00': 4}
{'HMIIOM-U1153-71': 5}
{'AUDIO-B1013-21': 6}
{'FCIOM-C1093-11': 7}
{'APM-C1026-68': 8}
{'VMCU-C1013-73': 9}

但是,您正在覆盖 ziplist,所以您只需要:

ziplist = []
for i, n in zip(list(dfactor_id["DTC_DTC_ID"]), weighted_avg):
    ziplist.append({i:n})
print(ziplist)

【讨论】:

  • 不需要任何循环来完成 OP 想要的。你只需要做ziplist = dict(zip(df['actor_id'], weighted_avg))
猜你喜欢
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2021-11-18
  • 2023-02-05
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多