【问题标题】:Using pandas to read JSON file for Python analysis使用 pandas 读取 JSON 文件进行 Python 分析
【发布时间】:2014-05-13 18:09:02
【问题描述】:

我遇到了一些问题,试图在我的 Python 编辑器中加载一个 JSON 文件,以便我可以对其中的数据进行一些分析。

JSON 文件位于以下文件夹中:'C:\Users\Admin\JSON files\file1.JSON'

它包含以下推文数据(这只是一条记录,那里有数百条):

{
    "created": "Fri Mar 13 18:09:33 GMT 2014",
    "description": "Tweeting the latest Playstation news!",
    "favourites_count": 4514,
    "followers": 235,
    "following": 1345,
    "geo_lat": null,
    "geo_long": null,
    "hashtags": "",
    "id": 2144411414,
    "is_retweet": false,
    "is_truncated": false,
    "lang": "en",
    "location": "",
    "media_urls": "",
    "mentions": "",
    "name": "Playstation News",
    "original_text": null,
    "reply_status_id": 0,
    "reply_user_id": 0,
    "retweet_count": 4514,
    "retweet_id": 0,
    "score": 0.0,
    "screen_name": "SevenPS4",
    "source": "<a href=\"http://twitterfeed.com\" rel=\"nofollow\">twitterfeed</a>",
    "text": "tweetinfohere",
    "timezone": "Amsterdam",
    "url": null,
    "urls": "http://bit.ly/1lcbBW6",
    "user_created": "2013-05-19",
    "user_id": 13313,
    "utc_offset": 3600
}

我正在使用以下代码来尝试测试这些数据:

import json
import pandas as pa
z = pa.read_json('C:\Users\Admin\JSON files\file1.JSON')
d = pa.DataFrame.from_dict([{k:v} for k,v in z.iteritems() if k in ["retweet_count", "user_id", "is_retweet"]])
print d.retweet_count.sum()

当我运行它时,它会成功读取 JSON 文件,然后打印出 retweet_count 的列表,如下所示:

0, 4514 1, 300 2, 450 3, 139 等等等等

我的问题: 我如何真正总结所有 retweet_count/user_id 值,而不是像上面显示的那样列出它们?

然后如何将此总和除以条目数以获得平均值?

如何选择 JSON 数据的样本大小而不是全部使用? (我以为是 d.iloc[:10] 但这不起作用)

使用 JSON 文件中的“is_retweet”字段,是否可以计算给出的假/真数量? JSON 文件中的 IE,我想要转发的推文数量和未转发的推文数量。

提前谢谢,是的,我对此很陌生..

z.info() 给出:

<class 'pandas.core.frame.DataFrame'> Int64Index: 506 entries, 0 to 505 Data columns (total 31 columns): created 506 non-null object description 506 non-null object favourites_count 506 non-null int64 followers 506 non-null int64 following 506 non-null int64 geo_lat 10 non-null float64 geo_long 10 non-null float64 hashtags 506 non-null object id 506 non-null int64 is_retweet 506 non-null bool is_truncated 506 non-null bool lang 506 non-null object location 506 non-null object media_urls 506 non-null object mentions 506 non-null object name 506 non-null object original_text 172 non-null object reply_status_id 506 non-null int64 reply_user_id 506 non-null int64 retweet_id 506 non-null int64 retweet_count 506 non_null int64 score 506 non-null int64 screen_name 506 non-null object source 506 non-null object status_count 506 non-null int64 text 506 non-null object timezone 415 non-null object url 273 non-null object urls 506 non-null object user_created 506 non-null object user_id 506 non-null int64 utc_offset 506 non-null int64 dtypes: bool(2), float64(2), int64(11), object(16)

当我运行 d.info() 时,它为什么将 retweet_count 和 user_id 显示为对象?

【问题讨论】:

  • df.info() 将列显示为非空对象,当我假设它们必须是值时,对吧?如何将它们更改为值而不是对象?&lt;class 'pandas.core.frame.DataFrame'&gt; Int64Index: 2 entries, 0 to 1 Data columns (total 2 columns): retweet_count 1 non-null object user_id 1 non-null object dtypes: object(2)
  • z的数据类型是什么?
  • 在底部查看我的编辑@myacobucci
  • 不完全确定,老实说,我以前从未使用过 pandas,我只是快速浏览了文档以了解您使用的方法和类以了解它们。抛出int(retweet_count_value) 应该将它们更改为整数而不会出现问题。
  • 抱歉,那条线在哪里?

标签: python json pandas analysis


【解决方案1】:

d.retweet_count 是您的retweet_counts 的字典列表,对吗?

所以要得到总和:

keys = d.retweet_count.keys()
sum = 0
for items in keys:
    sum+=d.retweet_count[items]

求平均值:

avg = sum/len(keys)

现在要获得样本大小,只需将 keys 分开即可:

sample_keys = keys[0:10]

求平均值

for items in sample_keys:
     sum+=d.retweet_count[items]
avg = sum/len(sample_keys)

【讨论】:

  • 我认为当我使用以下行 d = pa.DataFrame.from_dict([{k:v} for k,v in z.iteritems() if k in ["retweet_count", "user_id", "is_retweet"]]) 时,它会将我的值列转换为对象,因此我无法对它们运行 sum/mean/etc。将在几秒钟内尝试样本大小,谢谢。
  • 当你运行 print d.retweet_count 时,确切的输出是什么?
  • 我现在已经解决了这个问题,谢谢,现在尝试使用 JSON 数据样本而不是全部数据时遇到了问题。我和以前一样有z = pa.read_json('C:\Users\Admin\JSON files\file1.JSON'),但我希望使用 retweet_count 的 100/200 的样本,这样我就可以找到差异大小样本的均值/最大值/等。我试过keys = z.retweet_count.keys() sample_keys = keys[:200],然后用sample_keys.mean 调用平均值,但它不起作用,任何想法@myacobucci 谢谢
  • 什么时候出现错误? sample_keys 只是您的样本量的关键值。它们不是价值观……你必须列出你的价值观。
  • 没有一种叫做平均值的方法...您必须像以前一样自己计算才能获得平均值...我添加了另一个示例,向您展示如何使用 sample_keys..虽然这应该很明显。
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2014-05-11
相关资源
最近更新 更多