Python 将txt文件中保存的词典列表转换为数据帧
我有一个文本文件,基本上是多个python字典的列表。 文本文件如下所示 [{ques:[什么会导致弯板打滑?],选项:[{option:This opt no1,correct:true,number:1},{option:This opt no.2,correct:true,number:2},{option:[|这是opt3,correct:false,number:3}],indx:2.1.01-001}, {ques:[什么会导致危险情况?],选项:[{option:option1,correct:true,number:1},{option:opt2,correct:true,number:2}],indx:2.1.01-004}] 我想做什么 我想系统地将字典转换为熊猫数据框架: 什么不起作用 期望输出Python 将txt文件中保存的词典列表转换为数据帧,python,pandas,Python,Pandas,我有一个文本文件,基本上是多个python字典的列表。 文本文件如下所示 [{ques:[什么会导致弯板打滑?],选项:[{option:This opt no1,correct:true,number:1},{option:This opt no.2,correct:true,number:2},{option:[|这是opt3,correct:false,number:3}],indx:2.1.01-001}, {ques:[什么会导致危险情况?],选项:[{option:option1,c
您必须将dict展平并索引所有数据点。 以下是所需的代码: 数据=[{ques:[什么会导致弯管打滑?],选项:[{option:This opt no1,correct:True,number:1},{option:This opt no.2,correct:True,number:2},{option:[|这是opt3,correct:False,number:3}],indx:2.1.01-001}, {ques:[什么会导致危险情况?],选项:[{option:option1,correct:True,number:1},{option:opt2,correct:True,number:2}],indx:2.1.01-004}] s=[] 对于数据中的行: 问题=行。获取“问题”[0] idx=行。获取'indx' 对于row.getoptions中的选项,[]: number=option.getnumber,np.nan number=f这是选项{number}编辑 correct=option.getcorrect,np.nan s、 问题, 数字=数字, 正确的, 索引=idx df=pd.DataFrames df
您必须将dict展平并索引所有数据点。 以下是所需的代码: 数据=[{ques:[什么会导致弯管打滑?],选项:[{option:This opt no1,correct:True,number:1},{option:This opt no.2,correct:True,number:2},{option:[|这是opt3,correct:False,number:3}],indx:2.1.01-001}, {ques:[什么会导致危险情况?],选项:[{option:option1,correct:True,number:1},{option:opt2,correct:True,number:2}],indx:2.1.01-004}] s=[] 对于数据中的行: 问题=行。获取“问题”[0] idx=行。获取'indx' 对于row.getoptions中的选项,[]: number=option.getnumber,np.nan number=f这是选项{number}编辑 correct=option.getcorrect,np.nan s、 问题, 数字=数字, 正确的, 索引=idx df=pd.DataFrames df 使用explode并应用pd.json\u normalize 输出:
ques indx option correct
0 What can cause a dangerous situation? 2.1.01-004 option1 True
1 What can cause a dangerous situation? 2.1.01-004 opt2 True
2 What can cause skidding on bends? 2.1.01-001 This opt no1 True
3 What can cause skidding on bends? 2.1.01-001 this opt no.2 True
4 What can cause skidding on bends? 2.1.01-001 [| this is opt3 False
或者只使用json_normalize来解析json数据
数据
[{ques:[什么会导致弯板打滑?],选项:[{option:This opt no1,correct:true,number:1},{option:This opt no.2,correct:true,number:2},{option:[|这是opt3,correct:false,number:3}],indx:2.1.01-001},
{ques:[什么会导致危险情况?],选项:[{option:option1,correct:true,number:1},{option:opt2,correct:true,number:2}],indx:2.1.01-004}]
'
data=json.loadsdata\u str
df=pd.json\u normalizedata,记录路径=['options',元=['indx','ques']
printdf
使用explode并应用pd.json\u normalize
输出:
ques indx option correct
0 What can cause a dangerous situation? 2.1.01-004 option1 True
1 What can cause a dangerous situation? 2.1.01-004 opt2 True
2 What can cause skidding on bends? 2.1.01-001 This opt no1 True
3 What can cause skidding on bends? 2.1.01-001 this opt no.2 True
4 What can cause skidding on bends? 2.1.01-001 [| this is opt3 False
或者只使用json_normalize来解析json数据
数据
[{ques:[什么会导致弯板打滑?],选项:[{option:This opt no1,correct:true,number:1},{option:This opt no.2,correct:true,number:2},{option:[|这是opt3,correct:false,number:3}],indx:2.1.01-001},
{ques:[什么会导致危险情况?],选项:[{option:option1,correct:true,number:1},{option:opt2,correct:true,number:2}],indx:2.1.01-004}]
'
data=json.loadsdata\u str
df=pd.json\u normalizedata,记录路径=['options',元=['indx','ques']
printdf
谢谢。您是否可以添加代码,将列选项添加到文本中。例如,这是选项1。我不需要数字,只需要选项的文本。请参见上文;-@FaisalI的意思是我不需要列“数字”,而是一列名为“选项”,显示所有问题的选项文本,如:此选项1,此选项2.text not Digits 1,2,3,1,2我不确定我是否理解,因为在pandas数据框中存储数据是一种不方便的方式。通常,pandas提供的各种功能会根据需要对数据进行切片。如果您需要副标题,您可以创建一个系列,但这会使不需要它的数据集变得复杂。谢谢。您是否可以添加代码,将列选项添加到文本中。例如,这是选项1。我不需要数字,但需要选项的文本。请参见上文;-@FaisalI的意思是我不需要列“数字”,而是一列名为“选项”,显示所有问题的选项文本,如:此选项1,此选项2。文本不是数字1,2,3,1,2我不确定我是否需要理解为将数据存储在dataf中是一种不方便的方式
拉姆。通常使用pandas提供的各种功能根据需要对数据进行切片。如果你想要副标题,你可以创建一个系列,但这会使不需要它的数据集变得复杂。谢谢@Ferris。我接受他的建议,在原始数据上使用json_规范化更方便。谢谢@Ferris。我接受他的建议,在原始数据上使用json_规范化更方便。
result = (
df_ques.explode("ques")
.explode("options")
.groupby(['ques', 'indx'])['options']
.apply(pd.json_normalize)
.reset_index()
.drop(columns=['level_2', 'number'])
)
result
ques indx option correct
0 What can cause a dangerous situation? 2.1.01-004 option1 True
1 What can cause a dangerous situation? 2.1.01-004 opt2 True
2 What can cause skidding on bends? 2.1.01-001 This opt no1 True
3 What can cause skidding on bends? 2.1.01-001 this opt no.2 True
4 What can cause skidding on bends? 2.1.01-001 [| this is opt3 False
option correct number indx \
0 This opt no1 True 1 2.1.01-001
1 this opt no.2 True 2 2.1.01-001
2 [| this is opt3 False 3 2.1.01-001
3 option1 True 1 2.1.01-004
4 opt2 True 2 2.1.01-004
ques
0 What can cause skidding on bends?
1 What can cause skidding on bends?
2 What can cause skidding on bends?
3 What can cause a dangerous situation?
4 What can cause a dangerous situation?