关于导出到csv:使用Python将Json转换为CSV

Convert Json to CSV using Python

下面是我从在线气象站提取的json结构。 我还包括一个json_to_csv python脚本,该脚本应该将json数据转换为csv输出,但仅返回" Key"错误。 我只想从" current_observation"中提取数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
 "response": {
 "features": {
 "conditions": 1
  }
    }
  ,"current_observation": {
       "display_location": {
       "latitude":"40.466442",
       "longitude":"-85.362709",
       "elevation":"280.4"
        },
       "observation_time_rfc822":"Fri, 26 Jan 2018 09:40:16 -0500",
       "local_time_rfc822":"Sun, 28 Jan 2018 11:22:47 -0500",
       "local_epoch":"1517156567",
       "local_tz_short":"EST",
       "weather":"Clear",
       "temperature_string":"44.6 F (7.0 C)",
    }
}



import csv, json, sys
inputFile = open("pywu.cache.json", 'r') #open json file
outputFile = open("CurrentObs.csv", 'w') #load csv file
data = json.load(inputFile) #load json content
inputFile.close() #close the input file
output = csv.writer(outputFile) #create a csv.write
output.writerow(data[0].keys())
for row in data:
    output = csv.writer(outputFile) #create a csv.write
    output.writerow(data[0].keys())
for row in data:
    output.writerow(row.values()) #values row

检索温度字符串并将其转换为.csv格式的最佳方法是什么? 谢谢!


1
2
3
4
import pandas as pd
df = pd.read_json("pywu.cache.json")
df = df.loc[["local_time_rfc822","weather","temperature_string"],"current_observation"].T
df.to_csv("pywu.cache.csv")

也许熊猫可以为您提供帮助。 .read_json()函数创建一个不错的数据框,您可以从中轻松选择所需的行和列。 它也可以另存为csv。

要将纬度和经度添加到csv行中,您可以执行以下操作:

1
2
3
4
5
df = pd.read_json("pywu.cache.csv")
df = df.loc[["local_time_rfc822","weather","temperature_string","display_location"],"current_observation"].T
df = df.append(pd.Series([df["display_location"]["latitude"], df["display_location"]["longitude"]], index=["latitude","longitude"]))
df = df.drop("display_location")
df.to_csv("pywu.cache.csv")

要以数字值打印位置,可以执行以下操作:

1
2
df = pd.to_numeric(df, errors="ignore")
print(df['latitude'], df['longitude'])


这将找到json blob内部指定的所有键(例如" temperature_string"),然后将其写入csv文件。 您可以修改此代码以获取多个密钥。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import csv, json, sys

def find_deep_value(d, key):
# Find a the value of keys hidden within a dict[dict[...]]
# Modified from https://stackoverflow.com/questions/9807634/find-all-occurrences-of-a-key-in-nested-python-dictionaries-and-lists
# @param d dictionary to search through
# @param key to find

    if key in d:
        yield d[key]
    for k in d.keys():
        if isinstance(d[k], dict):
            for j in find_deep_value(d[k], key):
                yield j

inputFile = open("pywu.cache.json", 'r')  # open json file
outputFile = open("mypws.csv", 'w')  # load csv file
data = json.load(inputFile)  # load json content
inputFile.close()  # close the input file
output = csv.writer(outputFile)  # create a csv.write

# Gives you a list of temperature_strings from within the json
temps = list(find_deep_value(data,"temperature_string"))
output.writerow(temps)
outputFile.close()