我有CSV格式的資料,例如:

- 第一行是列號,讓我們忽略它。
- 第二行,從 Col_4 開始,是天數
- 第三行上:Col_1 和 Col_2 是坐標(經度、緯度),Col_3 是統計值,Col_4 以后是測量值。
如您所見,這種格式令人困惑。我想通過以下方式將其轉換為 JSON,例如:
{"points":{
"dates": ["20190103", "20190205"],
"0":{
"lon": "-8.072557",
"lat": "41.13702",
"measurements": ["-0.191792","-10.543130"],
"val": "-1"
},
"1":{
"lon": "-8.075557",
"lat": "41.15702",
"measurements": ["-1.191792","-2.543130"],
"val": "-9"
}
}
}
總結一下我到目前為止所做的作業,我將 CSV 讀取到 Pandas DataFrame:
df = pandas.read_csv("sample.csv")
我可以使用以下命令將日期提取到 Numpy 陣列中:
dates = df.iloc[0][3:].to_numpy()
我可以使用以下方法提取所有點的測量值:
measurements_all = df.iloc[1:,3:].to_numpy()
以及 lon、lat 和 val,分別為:
lon_all = df.iloc[1:,0:1].to_numpy()
lat_all = df.iloc[1:,1:2].to_numpy()
val_all = df.iloc[1:,2:3].to_numpy()
誰能解釋我如何將此資訊格式化為與 .json 示例相同的結構?
uj5u.com熱心網友回復:
有了這個資料框
df = pd.DataFrame([{"col1": 1, "col2": 2, "col3": 3, "col4":3, "col5":5},
{"col1": None, "col2": None, "col3": None, "col4":20190103, "col5":20190205},
{"col1": -8.072557, "col2": 41.13702, "col3": -1, "col4":-0.191792, "col5":-10.543130},
{"col1": -8.072557, "col2": 41.15702, "col3": -9, "col4":-0.191792, "col5":-2.543130}])
此代碼執行您想要的操作,盡管它沒有像您的示例那樣將任何內容轉換為字串。但是,如有必要,您應該能夠輕松做到這一點。
# generate dict with dates
final_dict = {"dates": [list(df["col4"])[1],list(df["col5"])[1]]}
# iterate over relevant rows and generate dicts
for i in range(2,len(df)):
final_dict[i-2] = {"lon": df["col1"][i],
"lat": df["col2"][i],
"measurements": [df[cname][i] for cname in ["col4", "col5"]],
"val": df["col3"][i]
}
這導致此輸出:
{0: {'lat': 41.13702,
'lon': -8.072557,
'measurements': [-0.191792, -10.54313],
'val': -1.0},
1: {'lat': 41.15702,
'lon': -8.072557,
'measurements': [-0.191792, -2.54313],
'val': -9.0},
'dates': [20190103.0, 20190205.0]}
uj5u.com熱心網友回復:
從資料中提取日期,然后從資料框中洗掉第一行:
dates =list(data.iloc[0][3:])
data=data.iloc[1:]
將日期插入字典:
points={"dates":dates}
遍歷資料框并將元素添加到字典中:
i=0
for index, row in data.iterrows():
element= {"lon":row["Col_1"],
"lat":row["Col_2"],
"measurements": [row["Col_3"], row["Col_4"]]}
points[str(i)]=element
i =1
您可以使用 json.dumps() 將 dict 轉換為字串物件:
points_json = json.dumps(points)
它將是字串物件,而不是 json(dict) 物件。在這篇文章Converting dictionary to JSON中有更多關于這個的資訊
uj5u.com熱心網友回復:
我將 Pandas 資料幀值轉換為一個串列,然后遍歷其中一個串列,并將這些串列添加到包含這些值的嵌套 JSON 物件中。
import pandas
import json
import argparse
import sys
def parseInput():
parser = argparse.ArgumentParser(description="Convert CSV measurements to JSON")
parser.add_argument(
'-i', "--input",
help="CSV input",
required=True,
type=argparse.FileType('r')
)
parser.add_argument(
'-o', "--output",
help="JSON output",
type=argparse.FileType('w'),
default=sys.stdout
)
return parser.parse_args()
def main():
args = parseInput()
input_file = args.input
output = args.output
dataframe = pandas.read_csv(input_file)
longitudes = dataframe.iloc[1:,0:1].T.values.tolist()[0]
latitudes = dataframe.iloc[1:,1:2].T.values.tolist()[0]
averages = dataframe.iloc[1:,2:3].T.values.tolist()[0]
measurements = dataframe.iloc[1:,3:].values.tolist()
dates=dataframe.iloc[0][3:].values.tolist()
points={"dates":dates}
for index, val in enumerate(longitudes):
entry = {
"lon":longitudes[index],
"lat":latitudes[index],
"measurements":measurements[index],
"average":averages[index]
}
points[str(index)] = entry
json.dump(points, output)
if __name__ == "__main__":
main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/362520.html
