微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Pandas 将 json 转换为 csv

如何解决使用 Pandas 将 json 转换为 csv

我有一个 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?