通过熊猫从JSON加载文本值

时间:2019-01-18 00:56:14

标签: python pandas

我要读取此文件:

{"data": {"1547700225.3": Infinity, "1547700227.55": Infinity, "1547700229.8099997": Infinity, "1547700231.9899995": Infinity, "1547700140.05": Infinity}}

我无法控制文件的格式(即,我必须使用已有的文件),并且我还有一些其他文件,它们的格式与我已经阅读的格式相同。显然,与此不同的是“ Infinity”值,当我这样做时会导致错误:

df1 = pd.read_json('filename.json').reset_index()

df1 = pd.read_json('filename.json')

目的是读取此文件,然后使用append()将其添加到其他数据中。

所有其他文件都正常工作,因为它们具有数字值,但是该文件中有一个我认为引起错误的单词。

显然,我想读取此文件,将Infinity替换为null,如果那里还有其他数值,则它们会留在那里。

2 个答案:

答案 0 :(得分:0)

首先从标准库中使用json.load()读取文件,然后将其转换为数据框,这可能是最简单的:

import json
import pandas as pd

fname = 'yourfile.json'

with open(fname, 'r') as f:
  dat = json.load(f)

dat_df = pd.DataFrame(dat)
dat_df.reset_index(inplace=True)

## >>> print(dat_df)
##            index       data
## 0  1547700140.05        inf
## 1  1547700225.3         inf
## 2  1547700227.55        inf
## 3  1547700229.8099997   inf
## 4  1547700231.9899995   inf

然后您可以将inf替换为NaN,例如:

import numpy as np
dat_df.replace(np.inf, np.nan, inplace=True)

## >>> print(dat_df)
##            index       data
## 0  1547700140.05        NaN
## 1  1547700225.3         NaN
## 2  1547700227.55        NaN
## 3  1547700229.8099997   NaN
## 4  1547700231.9899995   NaN

答案 1 :(得分:0)

您可以使用内置的python模块json来处理将文件加载为Python字典类型:

 import json
 with open("filename.json") as f:
    data = json.load(f)

这时,数据是一个Python字典,其中Infinity值作为float类型加载。

接下来,您可以使用字典创建熊猫DataFrame

 df = pd.DataFrame(data)

pandas会将Infinity值加载为numpy.float64类型

在这一点上,如果要将数字无穷大转换为na,可以这样做:

import numpy as np
df = df.replace(np.inf, np.nan)