我对python很陌生,我必须解决这个用例。请您帮我解决这个问题吗?
这是我的json文件
{"data":[{"id":"77","value":"hello"},{"id":"5","value":"HI"},{"id":"1","value":"whats up"},{"id":"2","value":"what"},{"id":"120","value":"hello"},{"id":"170","value":"hello"},{"id":"190","value":"hello"}]}
首先我需要将此json文件转换为dataframe吗?
with open('Sample.json') as f:
data = json.load(f,cls=Decoder)
print(data)
list=[]
list=(data['data'])
df = pd.DataFrame(list,columns=['id','value'])
print(df.sort_values(by=['id']))
输出应如下所示!!!
按升序排列 Output
到此为止:
在此之后,我需要你们的帮助,例如... 列ID {1,2,5,77,120,170,190}中的值,以及值列中的相应值。 我必须将所有缺少的行分别添加到id和值应该是仅空格。 从ID“ 1”到ID“ 190” 像id列应该看起来像{1,2,3,4,5,6,7,8 ..............,77 .... 120..170 ... 190 }在2到5之间缺少数字3和4以及value列应为空或仅空格。 输出看起来像
id value
1 whats up
2 what
3 space
4 space
5 hi
6 space
.
.
.
77 hello
.
.
.
upto 190
如果可以的话,请附上代码。
答案 0 :(得分:0)
您可以使用的一种方法是从json定义一个对象,然后使用pd.read_json()
将其放入数据框。最后使用sort_values()
对其进行升序排序。之后,我发现没有比创建一个support_df
更好的选择了,它将用于添加所需的额外行,最后创建np.where
来保持与原始df
相对应的值,或者使用space
中的support_df
:
import pandas as pd
import json
import numpy as np
data = {"data":[{"id":"77","value":"hello"},{"id":"5","value":"HI"},{"id":"1","value":"whats up"},{"id":"2","value":"what"},{"id":"120","value":"hello"},{"id":"170","value":"hello"},{"id":"190","value":"hello"}]}
j = json.dumps(data)
df = pd.read_json(json.dumps(data),orient='split').sort_values(['id'])
support_df = pd.DataFrame({'id':range(min(df['id']),max(df['id']+1)),'value_aux':'space'})
final_df = support_df.merge(df,how='left')
final_df['value'] = np.where(final_df['value'].isna(),final_df['value_aux'],final_df['value'])
final_df = final_df.drop(columns='value_aux')
print(final_df)
输出:
id value
0 1 whats up
1 2 what
2 3 space
3 4 space
4 5 HI
.. ... ...
185 186 space
186 187 space
187 188 space
188 189 space
189 190 hello
答案 1 :(得分:0)
对于JSON到字典,您可以直接使用json规范化,然后在其上应用set_index并将id设置为索引。然后在新数据框上应用np.re_index和np.arange
import numpy as np
import pandas as pd
from pandas.io.json import json_normalize
data = [{"id":77,"value":"hello"},{"id":5,"value":"HI"},{"id":1,"value":"whats up"},{"id":2,"value":"what"},{"id":120,"value":"hello"},{"id":170,"value":"hello"},{"id":190,"value":"hello"}]
df = json_normalize(data)
new_df = df.set_index('id')
new_df.reindex(np.arange(df.id.min(), df.id.max() + 1)).fillna('space')
答案 2 :(得分:0)
您可以使用reindex和np.arange(创建所需的索引的完整列表)来创建空白行,该行基于id列中缺少的值。 (您必须set the id column as the index first)
答案 3 :(得分:0)
您可以使用df.iloc[-1]
添加缺少的值,也可以使用json.dumps(data, sort_keys=True)
来读取json
文件
data ={"data":[{"id":"77","value":"hello"},{"id":"5","value":"HI"},{"id":"1","value":"whats up"},{"id":"2","value":"what"},{"id":"120","value":"hello"},{"id":"170","value":"hello"},{"id":"190","value":"hello"}]}
print(data)
list=[]
list=(data['data'])
df = pd.DataFrame(list,columns=['id','value'])
df.iloc[-1]=[5,"go"] # here you can add any other DataFrame
print(df.sort_values(by=['id']))