【问题标题】:How to delete elements in JSON if key is not a number?如果键不是数字,如何删除 JSON 中的元素?
【发布时间】:2021-01-11 21:46:19
【问题描述】:

所以我有一个包含 600.000 条推文的大型 JSON 文件。 在这些推文中,我需要知道确切的位置。 我通过运行以下代码来执行此操作,我将在其中加载前 40000 条推文。 tweets_data 是加载的 JSON 文件。

test_tweets = tweets_data[:40000]

import pandas as pd

tweets = pd.DataFrame()

tweets['text'] =    list(map(lambda tweet: tweet['text'], test_tweets))
tweets['lang'] =    list(map(lambda tweet: tweet['lang'], test_tweets))
tweets['country'] = list(map(lambda tweet: tweet['place']['country'] if tweet['place'] != None else None, test_tweets))
tweets['coordinates'] = list(map(lambda tweet: tweet['place']['bounding_box']['coordinates'], test_tweets))

我在最后一行得到一个错误,指出:

TypeError                                 Traceback (most recent call last)
<ipython-input-12-87ebee84f083> in <module>
      9 tweets['lang'] =    list(map(lambda tweet: tweet['lang'], test_tweets))
     10 tweets['country'] = list(map(lambda tweet: tweet['place']['country'] if tweet['place'] != None else None, test_tweets))
---> 11 tweets['coordinates'] = list(map(lambda tweet: tweet['place']['bounding_box']['coordinates'], test_tweets))
     12 
     13 

<ipython-input-12-87ebee84f083> in <lambda>(tweet)
      9 tweets['lang'] =    list(map(lambda tweet: tweet['lang'], test_tweets))
     10 tweets['country'] = list(map(lambda tweet: tweet['place']['country'] if tweet['place'] != None else None, test_tweets))
---> 11 tweets['coordinates'] = list(map(lambda tweet: tweet['place']['bounding_box']['coordinates'], test_tweets))
     12 
     13 

TypeError: 'NoneType' object is not subscriptable

认为这是因为缺少一些坐标数据,但我不确定。我不介意删除几行,但我不知道该怎么做。

任何帮助将不胜感激!

【问题讨论】:

  • 你能提供一些示例推文吗?最好只使用其构造函数创建 DataFrame,但我需要知道推文的格式以帮助您

标签: python json pandas twitter


【解决方案1】:

和上一行一样,在尝试访问tweet['place'][anything]之前,您必须检查tweet['place'] 是否不是None

tweets['coordinates'] = list(map(lambda tweet: tweet['place']['bounding_box']['coordinates'] if tweet['place'] is not None else None, test_tweets))

我假设没有必要同时检查tweet['place']['bounding_box']。如果这不是一个安全的假设,请添加额外的检查。

tweets['coordinates'] = list(map(lambda tweet: tweet['place']['bounding_box']['coordinates'] if tweet['place'] and tweet['place']['bounding_box'] else None, test_tweets))

【讨论】:

  • 您好,感谢您的帮助!老实说,我不知道“位置”和“边界框”是否可以。我怎样才能检查它们?
  • 首先检查创建 JSON 的代码,看看它是否总是填写它们。
  • 因为它来自 Twitter API,我不知道确定。有没有办法像检查坐标一样检查地点和边界框?
  • 那么它应该在API文档中。
  • if tweet['place'] is not null and tweet['place']['bounding_box'] is not null then ... else ...
猜你喜欢
  • 2023-01-24
  • 2018-10-14
  • 2019-11-20
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2015-04-16
相关资源
最近更新 更多