将JSON格式的文件读取到pandas DataFrame中

时间:2019-12-12 19:39:12

标签: json python-3.x pandas dataframe

我想将JSON格式化程序文件读入pandas DataFrame中,从而将数据集按行和列进行组织。我已附上JSON文件中数据的外观图。原始数据具有从2010/01/01到2010/01/30的30天每日温度数据。

Raw JSON data in the input file '09386950_NM_USGS_TOBS.json'

$i = 0;
        foreach ($html->find('.mlv-w-55 > *') as $jobs) {
            $item['title'] = $html->find('h2', $i)->plaintext;
            $item['location'] = $html->find('dl',$i)->plaintext;
            $item['salary'] = $html->find('dl',$i)->next_sibling()->plaintext;
            $item['job_type'] = $html->find('dl',$i)->next_sibling()->next_sibling()->plaintext;
            $item['company'] = $html->find('dl',$i)->next_sibling()->next_sibling()->next_sibling()->plaintext;
            $item['jobdesc'] = $html->find('.jobdesc', $i)->plaintext;
            $jobss[] = $item;
            $i++;
        }

我尝试过的代码如下:

[{
    'beginDate': '2010-01-01 00:00:00',
    'collectionDates': [],
    'duration': 'DAILY',
    'endDate': '2010-01-30 00:00:00',
    'flags': [],
    'stationTriplet': '302:OR:SNTL',
    'values': [
        Decimal('31.820'),
        Decimal('27.140'),
        Decimal('14.900'),
        Decimal('35.600'),
        Decimal('34.340'),
        Decimal('31.100'),
        Decimal('9.140'),
        Decimal('21.380'),
        Decimal('36.140'),
        Decimal('28.040'),
        Decimal('35.960'),
        Decimal('34.700'),
        Decimal('28.040'),
        Decimal('25.160'),
        Decimal('33.980'),
        Decimal('31.640'),
        Decimal('31.640'),
        Decimal('29.300'),
        Decimal('29.120'),
        Decimal('25.880'),
        Decimal('24.980'),
        Decimal('21.740'),
        Decimal('18.320'),
        Decimal('20.480'),
        Decimal('26.780'),
        Decimal('28.940'),
        Decimal('24.440'),
        Decimal('15.440'),
        Decimal('21.020'),
        Decimal('31.820')
    ]
}]

我收到的错误消息是:

import pandas as pd
import json
with open(r'C:\Users\Anurag.Srivastava\Downloads\09386950_NM_USGS_TOBS.json', 'r') as f:
    data = json.load(f)
    df = pd.DataFrame(data)

2 个答案:

答案 0 :(得分:0)

该文件不是有效的JSON数据,因此pasrser无法正确检测对象。使用任何在线JSON验证程序,例如:https://jsonlint.com/ 修复JSON后。我也建议您使用

pd.read_json(<Path>)

这种方法将以正确的方式创建数据框。

答案 1 :(得分:0)

为了使Python能够将文件视为json,需要将单引号替换为双引号,并且需要清除Decimal()表示法。您可以执行以下操作:

import pandas as pd
import json
with open(file_name) as f:
    s = f.read()
    s = s.replace("'", '"')
    s = s.replace('Decimal("', '')
    s = s.replace('")', '')
    data = json.loads(s)
    for item in data:
        df = pd.DataFrame(item)

然后可以创建一个索引,并可以附加相应的值,例如:

idx = pd.date_range(item['beginDate'], item['endDate'])
df = pd.DataFrame(idx)
df['values'] = item['values']