如何解决python pandas - 将主 df 列中的唯一 Id 添加回存储在数据帧列表中的已处理 dfs
我有一个 df,其中每行包含多个需要读取和规范化的 json 字符串。
我可以读出 json 信息并通过将每一行作为新数据帧存储在列表中来规范化列 - 我已经用下面的代码完成了。
但是我需要在原始 df 中附加原始唯一 Id(即 'id': ['9clpa','g659am']) - 这在我当前的代码中丢失了。
预期输出是每个 Id 的数据帧列表,其中包括展开的 json 信息,还有一个包含 Id 的附加列(将为最终 df 的每一行重复)。
我希望这是有道理的,非常欢迎任何建议。非常感谢
数据框
df = pd.DataFrame(data={'id': ['9clpa','g659am'],'i2': [('{"t":"unique678","q":[{"qi":"01","answers":[{"answer":"M","value":"1"},{"answer":"F","value":"2"},{"answer":"G","value":"3"},{"answer":"V","value":"4"}]},{"qi":"02",{"answer":"A",{"answer":"B","value":"4"},"value":"5"},{"answer":"NC","value":"6"},{"answer":"O","value":"7"} ]}]}'),('{"t":"unique428","value":"7"} ]}]}')]})
当前代码
out={}
for i in range(len(df)):
out[i] = pd.read_json(df.i2[i])
out[i] = pd.json_normalize(out[i].q)
预期输出
pd.DataFrame(data={'id': ['9clpa','9clpa'],'qi': ['01','02'],'answers': ['{"answer":"M","value":"4"}','"answer":"M","value":"7"']})
pd.DataFrame(data={'id': ['g659am',"value":"7"']})
解决方法
class ContactsActivity : AppCompatActivity() {
private lateinit var contactsActivityBinding :ActivityContactsBinding
private val contactItemViewModel: ContactItemViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
contactsActivityBinding = ActivityContactsBinding.inflate(layoutInflater)
setContentView(contactsActivityBinding.root)
if (savedInstanceState == null) {
val manager = supportFragmentManager
val transaction = manager.beginTransaction()
transaction.replace(contactsActivityBinding.flContent.id,PeopleFragment.newInstance())
transaction.commit()
}
}
}
您可以添加一个 lambda 函数,它将 'id' 的值分配给新形成的 df。
编辑:您可以在列 1 中添加“id”列的位置,并定义创建数据框时希望它出现的位置。
输出数据帧:
,在标准化列之后,您只是缺少将 id
分配给您的数据框:
out={}
for i in range(len(df)):
out[i] = pd.read_json(df.i2[i])
out[i] = pd.json_normalize(out[i].q)
out[i]['id'] = df.id[i]
out[i] = out[i].loc[:,['id','qi','answers']]
输出:
>>> out[0]
id qi answers
0 9clpa 01 [{'answer': 'M','value': '1'},{'answer': 'F','value': '2'},{'answer': 'G','value': '3'},{'answer': 'V','value': '4'}]
1 9clpa 02 [{'answer': 'M',{'answer': 'A',{'answer': 'B','value': '4'},'value': '5'},{'answer': 'NC','value': '6'},{'answer': 'O','value': '7'}]
,
您可以使用 .json_normalize
(此处的文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.json_normalize.html)
(来自https://medium.com/swlh/converting-nested-json-structures-to-pandas-dataframes-e8106c59976e)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。