【问题标题】:Reducing the size of JSON to dataframe - Is there an equivalent 'usecols' argument for pandas.read_json?将 JSON 的大小减小到数据框 - pandas.read_json 是否有等效的“usecols”参数?
【发布时间】:2022-01-21 09:49:39
【问题描述】:

我正在尝试减小我拥有的数据框的大小。

源数据是经过 gzip 压缩的 JSON,大约为 . s3 中 20 GB,每行如下所示:

{"timestamp":"1633121635","name":"www.hello.com","type":"a","value":"ipv4:1.1.1.1"}

我正在使用pandas.read_json 分块读取它,然后删除我不想要的键,例如

for df in pd.read_json(s3_source_data_location,
                           lines=True,
                           chunksize=20000000):
    df.drop('timestamp', axis=1, inplace=True)
    df.drop('type', axis=1, inplace=True)

我知道我可以尝试通过摆弄“值”和“名称”的数据类型来减小大小,但我想先看看我是否只能读取我想要的键。

pandas.read_csv 有一个 'usecols' 参数,您可以在其中指定要读取的列。希望有一种方法可以用 JSON 做到这一点。

【问题讨论】:

    标签: python json pandas amazon-s3 bigdata


    【解决方案1】:

    看看 JSON 的结构,你只想保留名称和值。因此,为了做到这一点并减少计算类型,首先创建一个要保留在数据框中的列列表:

    cols = ['name', 'value']
    

    然后创建一个空列表并定义你的文件路径:

    data = []
    file_name = 'path-of-json-file.json'
    

    然后打开并阅读特定类别:

    with open(file_name, encoding='latin-1') as f:
        for line in f:
            doc = json.loads(line)
            lst = [doc['name'], doc['value']]
            data.append(lst)
    
    df = pd.DataFrame(data=data, columns=cols)
    

    【讨论】:

      猜你喜欢
      • 2022-06-29
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多