Python将多个数组值写入csv

Python将多个数组值写入csv,python,Python,在我的代码中,我读取JSON数据的值并插入到数组中 def retrive_json(): with open('t_v1.json') as json_data: d = json.load(json_data) array = [] for i in d['ride']: origin_lat = i['origin']['lat'] origin_lng = i['origin']['lng'] des

在我的代码中,我读取JSON数据的值并插入到数组中

def retrive_json():
    with open('t_v1.json') as json_data:
        d = json.load(json_data)
    array = []
    for i in d['ride']:
        origin_lat = i['origin']['lat']
        origin_lng = i['origin']['lng']
        destination_lat = i['destination']['lat']
        destination_lng = i['destination']['lng']
        array.append([origin_lat,origin_lng,destination_lat,destination_lng])

    return array
结果数组如下所示:

[[39.72417, -104.99984, 39.77446, -104.9379], [39.77481, -104.93618, 39.6984, -104.9652]]
如何将每个数组的每个元素写入csv中的特定字段? 我试过这样做:

wrt = csv.writer(open(t_.csv', 'w'), delimiter=',',lineterminator='\n')
for x in jjson:
    wrt.writerow([x])
但是每个数组的值都存储在一个字段中 如何解决它,并在一个字段中写入每一个

这是我的json文件:

{
"ride":[
  {
     "origin":{
        "lat":39.72417,
        "lng":-104.99984,
        "eta_seconds":null,
        "address":""
     },
     "destination":{
        "lat":39.77446,
        "lng":-104.9379,
        "eta_seconds":null,
        "address":null
     }
  },
  {
     "origin":{
        "lat":39.77481,
        "lng":-104.93618,
        "eta_seconds":null,
        "address":"10 Albion Street"
     },
     "destination":{
        "lat":39.6984,
        "lng":-104.9652,
        "eta_seconds":null,
        "address":null
     }
  }
]
}

对我来说,看起来你有一个数组,你需要单独的元素。因此,您需要为循环使用嵌套的
。您当前的
for
循环是获取每个数组,然后将每个数组拆分为您希望循环的元素。我建议这样做:

for x in jjson:
    for y in x:
        wrt.writerow([y])
显然,你可能想更新你的括号等这只是我给你一个如何解决你的问题的想法


让我知道进展如何

在我看来,你好像有一个数组,你需要单独的元素。因此,您需要为
循环使用嵌套的
。您当前的
for
循环是获取每个数组,然后将每个数组拆分为您希望循环的元素。我建议这样做:

for x in jjson:
    for y in x:
        wrt.writerow([y])
显然,你可能想更新你的括号等这只是我给你一个如何解决你的问题的想法

让我知道进展如何

这可能会有帮助:

import json
import csv

def retrive_json():
    with open('data.json') as json_data:
        d = json.load(json_data)
    array = []
    for i in d['ride']:
        origin_lat = i['origin']['lat']
        origin_lng = i['origin']['lng']
        destination_lat = i['destination']['lat']
        destination_lng = i['destination']['lng']
        array.append([origin_lat,origin_lng,destination_lat,destination_lng])

    return array



res = retrive_json()

csv_cols = ["orgin_lat", "origin_lng", "dest_lat", "dest_lng"]

with open("output_csv.csv", 'w') as out:
    writer = csv.DictWriter(out, fieldnames=csv_cols)

    writer.writeheader()
    for each_list in res:
        d = dict(zip(csv_cols,each_list))
        writer.writerow(d)
生成的输出csv为:

orgin_lat,origin_lng,dest_lat,dest_lng
39.72417,-104.99984,39.77446,-104.9379
39.77481,-104.93618,39.6984,-104.9652
这可能有助于:

import json
import csv

def retrive_json():
    with open('data.json') as json_data:
        d = json.load(json_data)
    array = []
    for i in d['ride']:
        origin_lat = i['origin']['lat']
        origin_lng = i['origin']['lng']
        destination_lat = i['destination']['lat']
        destination_lng = i['destination']['lng']
        array.append([origin_lat,origin_lng,destination_lat,destination_lng])

    return array



res = retrive_json()

csv_cols = ["orgin_lat", "origin_lng", "dest_lat", "dest_lng"]

with open("output_csv.csv", 'w') as out:
    writer = csv.DictWriter(out, fieldnames=csv_cols)

    writer.writeheader()
    for each_list in res:
        d = dict(zip(csv_cols,each_list))
        writer.writerow(d)
生成的输出csv为:

orgin_lat,origin_lng,dest_lat,dest_lng
39.72417,-104.99984,39.77446,-104.9379
39.77481,-104.93618,39.6984,-104.9652

假设我们有:

jsonstring = """{
    "ride":[
      {
         "origin":{
            "lat":39.72417,
            "lng":-104.99984,
            "eta_seconds":null,
            "address":""
         },
         "destination":{
            "lat":39.77446,
            "lng":-104.9379,
            "eta_seconds":null,
            "address":null
         }
      },
      {
         "origin":{
            "lat":39.77481,
            "lng":-104.93618,
            "eta_seconds":null,
            "address":"10 Albion Street"
         },
         "destination":{
            "lat":39.6984,
            "lng":-104.9652,
            "eta_seconds":null,
            "address":null
         }
      }
    ]
    }"""
以下是一个解决方案:

import pandas as pd
import json

# Load json to dataframe
df = pd.DataFrame(json.loads(jsonstring)["ride"])
# Create the new columns
df["o1"] = df["origin"].apply(lambda x: x["lat"])
df["o2"] = df["origin"].apply(lambda x: x["lng"])
df["d1"] = df["destination"].apply(lambda x: x["lat"])
df["d2"] = df["destination"].apply(lambda x: x["lng"])

#export
print(df.iloc[:,2:].to_csv(index=False, header=True))
#use below for file
#df.iloc[:,2:].to_csv("output.csv", index=False, header=True) 
import json
from pandas.io.json import json_normalize
open('data.json') as json_data:
    d = json.load(json_data)
df = json_normalize(d["ride"])
cols = ["origin.lat","origin.lng","destination.lat","destination.lng"]
df[cols].to_csv("output.csv",index=False,header=False)
返回:

o1,o2,d1,d2
39.72417,-104.99984,39.77446,-104.9379
39.77481,-104.93618,39.6984,-104.9652
简明回答:

import pandas as pd
import json
with open('data.json') as json_data:
    d = json.load(json_data)
df = pd.DataFrame(d["ride"])
df["o1"],df["o2"] = zip(*df["origin"].apply(lambda x: (x["lat"],x["lng"])))
df["d1"],df["d2"] = zip(*df["destination"].apply(lambda x: (x["lat"],x["lng"])))
df.iloc[:,2:].to_csv("t_.csv",index=False,header=False)
或者,也许是最具可读性的解决方案:

import pandas as pd
import json

# Load json to dataframe
df = pd.DataFrame(json.loads(jsonstring)["ride"])
# Create the new columns
df["o1"] = df["origin"].apply(lambda x: x["lat"])
df["o2"] = df["origin"].apply(lambda x: x["lng"])
df["d1"] = df["destination"].apply(lambda x: x["lat"])
df["d2"] = df["destination"].apply(lambda x: x["lng"])

#export
print(df.iloc[:,2:].to_csv(index=False, header=True))
#use below for file
#df.iloc[:,2:].to_csv("output.csv", index=False, header=True) 
import json
from pandas.io.json import json_normalize
open('data.json') as json_data:
    d = json.load(json_data)
df = json_normalize(d["ride"])
cols = ["origin.lat","origin.lng","destination.lat","destination.lng"]
df[cols].to_csv("output.csv",index=False,header=False)

假设我们有:

jsonstring = """{
    "ride":[
      {
         "origin":{
            "lat":39.72417,
            "lng":-104.99984,
            "eta_seconds":null,
            "address":""
         },
         "destination":{
            "lat":39.77446,
            "lng":-104.9379,
            "eta_seconds":null,
            "address":null
         }
      },
      {
         "origin":{
            "lat":39.77481,
            "lng":-104.93618,
            "eta_seconds":null,
            "address":"10 Albion Street"
         },
         "destination":{
            "lat":39.6984,
            "lng":-104.9652,
            "eta_seconds":null,
            "address":null
         }
      }
    ]
    }"""
以下是一个解决方案:

import pandas as pd
import json

# Load json to dataframe
df = pd.DataFrame(json.loads(jsonstring)["ride"])
# Create the new columns
df["o1"] = df["origin"].apply(lambda x: x["lat"])
df["o2"] = df["origin"].apply(lambda x: x["lng"])
df["d1"] = df["destination"].apply(lambda x: x["lat"])
df["d2"] = df["destination"].apply(lambda x: x["lng"])

#export
print(df.iloc[:,2:].to_csv(index=False, header=True))
#use below for file
#df.iloc[:,2:].to_csv("output.csv", index=False, header=True) 
import json
from pandas.io.json import json_normalize
open('data.json') as json_data:
    d = json.load(json_data)
df = json_normalize(d["ride"])
cols = ["origin.lat","origin.lng","destination.lat","destination.lng"]
df[cols].to_csv("output.csv",index=False,header=False)
返回:

o1,o2,d1,d2
39.72417,-104.99984,39.77446,-104.9379
39.77481,-104.93618,39.6984,-104.9652
简明回答:

import pandas as pd
import json
with open('data.json') as json_data:
    d = json.load(json_data)
df = pd.DataFrame(d["ride"])
df["o1"],df["o2"] = zip(*df["origin"].apply(lambda x: (x["lat"],x["lng"])))
df["d1"],df["d2"] = zip(*df["destination"].apply(lambda x: (x["lat"],x["lng"])))
df.iloc[:,2:].to_csv("t_.csv",index=False,header=False)
或者,也许是最具可读性的解决方案:

import pandas as pd
import json

# Load json to dataframe
df = pd.DataFrame(json.loads(jsonstring)["ride"])
# Create the new columns
df["o1"] = df["origin"].apply(lambda x: x["lat"])
df["o2"] = df["origin"].apply(lambda x: x["lng"])
df["d1"] = df["destination"].apply(lambda x: x["lat"])
df["d2"] = df["destination"].apply(lambda x: x["lng"])

#export
print(df.iloc[:,2:].to_csv(index=False, header=True))
#use below for file
#df.iloc[:,2:].to_csv("output.csv", index=False, header=True) 
import json
from pandas.io.json import json_normalize
open('data.json') as json_data:
    d = json.load(json_data)
df = json_normalize(d["ride"])
cols = ["origin.lat","origin.lng","destination.lat","destination.lng"]
df[cols].to_csv("output.csv",index=False,header=False)

为什么要使用csv库

array = [[1, 2, 3, 4], [5, 6, 7, 8]]

with open('test.csv', 'w') as csv_file :
    csv_file.write("# Header Info\n" \
                   "# Value1, Value2, Value3, Value4\n")   # The header might be optional

    for row in array :
         csv_file.write(",".join(row) + "\n")

为什么要使用csv库

array = [[1, 2, 3, 4], [5, 6, 7, 8]]

with open('test.csv', 'w') as csv_file :
    csv_file.write("# Header Info\n" \
                   "# Value1, Value2, Value3, Value4\n")   # The header might be optional

    for row in array :
         csv_file.write(",".join(row) + "\n")


共享输入数组怎么样?我真的建议使用Pandas库来执行这些操作。数组输入是我问题中发布的第二个代码,它不应该只是wrt.writerow(x),但是如果您共享json数据中的一个示例,我可以向您展示如何使用Pandas进行操作。假设jjson是列表,并使用Pandas
df=pd.DataFrame(jjson)
df.to_csv(r“c:\temp.csv”)
。请注意,您也将在csv文件中获得默认索引。我已经更改了我的帖子,并附加了JSON。如何共享输入数组?我真的建议使用Pandas库来执行这些操作。数组输入是我问题中发布的第二个代码,它不应该只是wrt.writerow(x),但是如果您共享json数据中的一个示例,我可以向您展示如何使用Pandas进行操作。假设jjson是列表,并使用Pandas
df=pd.DataFrame(jjson)
df.to_csv(r“c:\temp.csv”)
。请注意,您也将在csv文件中获得默认索引。我已经更改了我的帖子,并附上了JSONY。您的代码正确且良好,但我注意到,如果我通过请求-响应读取json,则会出现以下错误:TypeError:预期字符串或buffer@APPGIS你正在使用请求库吗?在这种情况下,如果可能的话,发布你的链接。通常你必须使用json.dump或json.load。您还可以通过执行data=requests.get(url).json()直接获取json是的,我使用requests模块通过get请求获取json,但我有修复程序。谢谢你的帮助help@APPGIS但奇怪的是,您选择了哪种“解决方案”?3种解决方案中的第一种解决方案您的代码是正确和良好的,但我注意到,如果我通过请求-响应读取json,我会出现以下错误:TypeError:预期字符串或buffer@APPGIS你正在使用请求库吗?在这种情况下,如果可能的话,发布你的链接。通常你必须使用json.dump或json.load。您还可以通过执行data=requests.get(url).json()直接获取json是的,我使用requests模块通过get请求获取json,但我有修复程序。谢谢你的帮助help@APPGIS奇怪的是,你选择了哪一个“解决方案”?3个解决方案中的第一个