【问题标题】:Dataframe produced from .json file, the "date" column becomes altered (pictures shown) how do I prevent this?从 .json 文件生成的数据框,“日期”列被更改(显示图片)我该如何防止这种情况?
【发布时间】:2021-03-14 22:26:26
【问题描述】:

我对 python 比较陌生,我被分配了一项数据科学任务,我必须为此选择一个 API(选择 global-warming.org),然后清理、解析数据并将其存储为 json 文件,然后将其加载到数据框中以进行进一步分析。然后我必须使用 matplotlib 等分析数据。我决定提取温室气体(CH4、CO2、N2O)的每个 API,将每个数据集缩减到 2020 年 3 月——现在,然后看看我是否可以分析大流行如何影响温室气体的产生。然而,我正在努力使用我存储的 json 文件将初始甲烷数据(每年每月采集一次)加载到一个干净的数据框中。如下图所示,“日期”列似乎与例如2020.4 格式转成这个格式:1970-01-01 00:33:40.700 ?

如果有人能告诉我如何解决这个问题,我会非常非常感激。如果有人对如何完成任务有任何一般性建议,我会欠你的,但我目前正被困在这个问题上,弄清楚它本身就是一个巨大的帮助,我相信这很简单我不见了……

非常感谢!

yearly_methane.json 文件示例行:

[{"date": "1983.7", "average": "1625.9", "trend": "1634.6", "averageUnc": "2.4", "trendUnc": "1.5"}, {"date": "1983.8", "average": "1628.1", "trend": "1635.3", "averageUnc": "2.9", "trendUnc": "1.4"}, {"date": "1983.9", "average": "1638.4", "trend": "1636.0", "averageUnc": "2.2", "trendUnc": "1.3"}, {"date": "1983.10", "average": "1644.8", "trend": "1636.7", "averageUnc": "1.4", "trendUnc": "1.3"}, {"date": "1983.11", "average": "1642.6", "trend": "1637.5", "averageUnc": "0.8", "trendUnc": "1.2"}, {"date": "1983.12", "average": "1639.4", "trend": "1638.3", "averageUnc": "0.9", "trendUnc": "1.1"}, {"date": "1984.1", "average": "1638.6", "trend": "1639.2", "averageUnc": "1.9", "trendUnc": "1.0"}, {"date": "1984.2", "average": "1638.8", "trend": "1640.1", "averageUnc": "2.0", "trendUnc": "0.9"}, {"date": "1984.3", "average": "1640.7", "trend": "1641.1", "averageUnc": "1.6", "trendUnc": "0.8"}, {"date": "1984.4", "average": "1643.7", "trend": "1642.1", "averageUnc": "1.9", "trendUnc": "0.8"}, {"date": "1984.5", "average": "1642.9", "trend": "1643.1", "averageUnc": "1.1", "trendUnc": "0.7"}, {"date": "1984.6", "average": "1639.6", "trend": "1644.2", "averageUnc": "0.9", "trendUnc": "0.7"}, {"date": "1984.7", "average": "1637.7", "trend": "1645.3", "averageUnc": "1.2", "trendUnc": "0.7"}, {"date": "1984.8", "average": "1641.3", "trend": "1646.4", "averageUnc": "1.6", "trendUnc": "0.6"}, {"date": "1984.9", "average": "1650.4", "trend": "1647.6", "averageUnc": "1.3", "trendUnc": "0.6"}, {"date": "1984.10", "average": "1654.4", "trend": "1648.7", "averageUnc": "1.5", "trendUnc": "0.6"}, {"date": "1984.11", "average": "1653.6", "trend": "1649.8", "averageUnc": "1.2",

Image - Creating the initial json file (for reference)

Creating the desired dataframe - the date column becomes altered?

【问题讨论】:

  • 请编辑您的帖子并粘贴(作为文本)您yearly_methane.json 文件中的几行示例。
  • 刚刚完成了,谢谢!

标签: python json pandas dataframe data-manipulation


【解决方案1】:

首先使用convert_dates=False 绕过自动解析并使用dtype={'date': str} 强制将date 列作为原始字符串:

df = pd.read_json('yearly_methane.json', convert_dates=False, dtype={'date': str})
date average trend averageUnc trendUnc
0 1983.7 1625.9 1634.6 2.4 1.5
1 1983.8 1628.1 1635.3 2.9 1.4
2 1983.9 1638.4 1636.0 2.2 1.3
3 1983.10 1644.8 1636.7 1.4 1.3

然后使用pd.to_datetime手动将%Y.%m日期转换为datetime对象:

df.date = pd.to_datetime(df.date, format='%Y.%m')
date average trend averageUnc trendUnc
0 1983-07-01 1625.9 1634.6 2.4 1.5
1 1983-08-01 1628.1 1635.3 2.9 1.4
2 1983-09-01 1638.4 1636.0 2.2 1.3
3 1983-10-01 1644.8 1636.7 1.4 1.3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-13
    • 2014-02-22
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多