如何解决使用 Pandas 将 json 转换为 csv
import android.app.Activity
import android.graphics.Insets.add
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.ArrayAdapter
import android.widget.Spinner
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val spinner1: Spinner = findViewById(R.id.spinner1)
val spinner2: Spinner = findViewById(R.id.spinner2)
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter.createFromresource(
this,R.array.planets_array,android.R.layout.simple_spinner_item
).also { adapter ->
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
// Apply the adapter to the spinner
spinner1.adapter = adapter
}
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter.createFromresource(
this,android.R.layout.simple_spinner_item
).also { adapter ->
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
// Apply the adapter to the spinner
spinner2.adapter = adapter
}
class SpinnerActivity : Activity(),AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>,view: View?,pos: Int,id: Long) {
}
override fun onnothingSelected(parent: AdapterView<*>) {
// Another interface callback
}
}
}
}
这是我的代码片段,我试过:
"items": [
"id": "CITY","info": [
{
"id": 0,"type": "Box","attributes": {
"category": "Tree",},"group": 0,"z_order": 0,"Box": [
223.54,1.13,27.3,2.13
]
},{
"id": 0,"attributes": {
"category": "Building","bBox": [
9.91,64.21,313.1,13.09
]
}
],"attr": {
"frame": 47
},"image": {
"size": [
3024,4032
],"path": "photo2.jpeg"
}
},
和输出是它创建这些表:
df = pd.DataFrame(data["items"])
我希望有更多的列输出,例如
id,info,attr.frame,image.size,image.path
有什么帮助吗?谢谢!
解决方法
当然不是最漂亮的解决方案,但它有效,它可以帮助找到更好的解决方案:
df = pd.read_json(json.dumps(data))['items'].apply(pd.Series).explode('info')
df['image.size'] = df['image'].apply(pd.Series)['size']
df['image.path'] = df['image'].apply(pd.Series)['path']
df['attr.frame'] = df['attr'].apply(pd.Series)['frame']
df['info.id'] = df['info'].apply(pd.Series)['id']
df['info.type'] = df['info'].apply(pd.Series)['type']
df['info.attributes'] = df['info'].apply(pd.Series)['attributes']
df['info.attributes.category'] = df['info.attributes'].apply(pd.Series)['category']
df['info.group'] = df['info'].apply(pd.Series)['group']
df['info.z_order'] = df['info'].apply(pd.Series)['z_order']
df['info.box'] = df['info'].apply(pd.Series)['box']
df.drop(columns=['info','attr','info.attributes','image'],inplace=True)
第一行在info中按元素创建一行,最后一行去掉里面有字典的列,避免信息冗余。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。