我正在尝试加载一个 JSON 文件,该文件包含我的脚本所需的数据。它并不总是在 JSON 中完成,所以我以前从未加载过,所以我对正在发生的事情有点迷茫。
我遇到了一些错误,在 StackOverflow 上找到解决方案后,我现在找到了一种可以在我的 .JSON
中加载的方法:
data = [json.loads(line) for line in open('C:/filepath/data.json', 'r', encoding='utf8')]
#creates a list, but I need a dataframe
dataset = pd.DataFrame(data)
dataset
看起来像这样:
exp username email date items
ema 2_12_21_3_00_14 PM [{'item 1': '29'}, {'item 2': '19'}, {'item 3': '27'}, {'item 4': '24'}, {'item 5': '39'}, {'item 6': '40'}, {'item 7': '43'}, {'item 8': '19'}, {'item 9': '19'}, {'item 10': '22'}, {'item 11': '35'}, {'item 12': '33'}, {'item 13': '23'}, {'item 14': '27'}, {'item 15': '28'}, {'item 16': '23'}, {'item 17': '26'}, {'item 18': '30'}, {'item 19': '29'}, {'item 20': '31'}, {'item 21': '35'}, {'item 22': '29'}]
这些项目应该是单独的列,每行都有自己的数据。我不确定为什么会这样。有什么办法可以保留这些单独的列或转换此数据框以获取这些列?
一些额外信息:
我之前遇到的错误是 UnicodeDecodeError: 'charmap' codec can't decode byte
和 ```JSONDecodeError: Extra data````
那只是使用方法
File = open('data.json')
dataset = json.load(File)
#charmap issue
File = open('data.json', encoding='utf8')
dataset = json.load(File)
#extra data issue
编辑:
这是 data
在通过 pd.DataFrame
Type Size Value
dict 5 {'exp':'ema', 'username':'','email':'', 'date':'2_12_21_3_00_14 PM', ...
为简单起见,我只显示第一个条目,因为我的数据超过 6,000 个条目,并且在我的脚本中打印头部变得很奇怪。
我也可以点击 Value
部分,因为它是一本字典,它会打开一个元素表,其中列名与 dataset
相同,但处于水平方向。
答案 0 :(得分:0)
如果我理解正确:
你可以试试:
df=pd.DataFrame(data)
df=df.explode('items',ignore_index=True)
s=(pd.DataFrame(df.pop('items').tolist())
.agg(sorted,key=pd.isnull).dropna().T
.reset_index().rename(columns={'index':'items',0:'items value'}))
df=df.join(s)
df
的输出:
exp username email date items items value
0 ema NaN NaN 2_12_21_3_00_14 PM item 1 29
1 ema NaN NaN 2_12_21_3_00_14 PM item 2 19
2 ema NaN NaN 2_12_21_3_00_14 PM item 3 27
3 ema NaN NaN 2_12_21_3_00_14 PM item 4 24
4 ema NaN NaN 2_12_21_3_00_14 PM item 5 39
... ... ... .................. ...... ..
19 ema NaN NaN 2_12_21_3_00_14 PM item 20 31
20 ema NaN NaN 2_12_21_3_00_14 PM item 21 35
21 ema NaN NaN 2_12_21_3_00_14 PM item 22 29