【问题标题】:Trouble printing from a for loop从 for 循环打印时出现问题
【发布时间】:2020-03-15 04:16:15
【问题描述】:

对 python 来说还是很新...尝试从 API 中提取数据并将列表中每个字符串的输出打印到 json。问题是,循环运行我列表中的每个字符串都很好,但只打印列表中的最后一个字符串(零售)。

代码如下:

today = (datetime.date.today() + datetime.timedelta(days=1)).isoformat() + "T05:00:00"
start = (datetime.date.today() - datetime.timedelta(days=7)).isoformat() + "T05:00:00"
myList = ['Financials', 'Industry', 'Health Wellbeing', 'Manufacturing', 'Retail']


for list in myList:
    filtered = queries.get_mentions(name = list,
                                startDate = start,
                                endDate = today,
                                )
df = pd.DataFrame(filtered, columns=['account', 'addedtime',    'author',   'id',   'impact',   'snippet'])
Export_tojson = df.to_json(orient='records')

谁能帮忙?

【问题讨论】:

  • 您在每次通过时都会覆盖filtered 的值。要么将结果收集到一个列表中,要么在继续下一次迭代之前使用filtered
  • 也就是说,缩进最后两行
  • 谢谢,不幸的是,当我将代码转移到堆栈时,我必须在没有缩进的情况下粘贴它。我在我的代码中缩进了代码,它仍然像@chepner 解释的那样被覆盖

标签: python json pandas for-loop


【解决方案1】:

这里的问题是您在每次迭代时都覆盖了filtered 的值,而没有在数据框中设置它的值。

克服这个问题的一种方法,正如 cmets 中提到的 @chepner 将把 filtered 改为 list 类型

for list in myList:
    filtered = []

    filtered.append(queries.get_mentions(name = list,
                                startDate = start,
                                endDate = today,
                                ))

希望这会有所帮助 :) 如果您需要任何进一步的说明或帮助,请随时与我开始聊天!

【讨论】:

  • 嘿 Cyber​​Stems,非常感谢您的反馈。当我尝试你的版本时,我发现了一个断言错误:AssertionError: 111 columns passed, passed data has 1429 columns...有什么想法吗?
  • 你能告诉我你是如何将列表值传递给你的数据框的吗?
  • 在上面的列表中,您将看到 myList。这包含了我通过 for 循环的所有元素。在querys.get_mention(name=list)... name=list 是我引用for 循环以获取列表中名为myList 的每个元素的地方。希望这是有道理的
  • 至于数据框的列表项,最初我将过滤后的输出传递给 pd.dataframe
  • 老实说,我不确定您为什么会收到该错误。不过,一个厚颜无耻的解决方法是将列表中的所有元素连接成带有一些分隔符的字符串。然后,当您想将其转换回列表时,您只需将其拆分即可。如果我的回答没有帮助,请告诉我,我可以将其删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2021-03-07
  • 2016-03-01
相关资源
最近更新 更多