我要读取此文件:
{"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,如果那里还有其他数值,则它们会留在那里。
答案 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)