我在一家房地產公司作業,正在嘗試創建一個經常更新的 Excel 表格,其中包含有關單位/租戶/財產/等的所有公司資料。我們目前使用包含我們所有資料的物業管理網站。該站點有一個 api,我應該能夠使用它來訪問資料。
我試過從網站的api匯入資料,匯入成功。話雖如此,匯入的資料只是 json 檔案的格式,我在將其轉換為 csv 時遇到了麻煩。
這是我目前的程式。
'''all imports needed'''
import requests
import pandas as pd
import csv
import json
#get data from api
url ='https://*apiusername:apisecretkey@companyname*.appfolio.com/api/v1/reports/rent_roll.json?columns=Property,PropertyName,PropertyGroupId,PropertyAddress,Unit,Tenant,BdBa,SquareFt,MarketRent,Rent,MoveIn,MoveOut'
try:
response = requests.get(url).json()
print("successfully imported json data from appfolio api.")
except IOError:
print("I/O Error")
#flatten json dictionary just in case
def flattenjson(b, delim):
print("attempting to flatten json dictionary.")
val = {}
for i in b.keys():
if isinstance(b[i], dict):
get = flattenjson(b[i], delim)
for j in get.keys():
val[i delim j]= get[j]
else:
val[i] = b[i]
return val
test = flattenjson(response, ',')
#print output for test
print(test)
#confirm that test variable is in dictionary format
if isinstance(test, dict):
print("your imported file is a dictionary.")
#convert dictionary to a csv with pandas
try:
df = pd.DataFrame.from_dict(test)
print("converted dictionary to pandas dataframe.\n\n")
except:
print("Error")
try:
df.to_csv("data.csv")
print("successfully converted dataframe to csv file. attempting to read back data.\n\n")
df = pd.read_csv("data.csv", index_col=0)
print(df)
except:
print("Error")
如果我在將匯入的 json 字典轉換為 csv 之前列印它,這是它當前結構的示例。
{'results': [{'Property': '1020p - 1024 N.roadname Pkwy. Cityname, XX 12345', 'PropertyName': '1020p', 'PropertyGroupId': '418024, 418031, 418057, 418068, 418069, 418073, 418077rykAddress:'P.100', 'PropertyGroupId' Cityname, XX 12345', 'Unit': 'Commercial- Loop Lofts Unit B', 'Tenant': 無, 'BdBa': '--/--', 'SquareFt': '4,888', 'MarketRent': ' 4,000.00', 'Rent': None, 'MoveIn': None, 'MoveOut': None}, {'Property': '1020p - 1024 N. roadname Pkwy。Cityname, XX 12345, 'PropertyName': '1020p', 'PropertyGroupId': '418024, 418031, 418057, 418068, 418069, 418073, 418077777777777w.p', 'PropertyGroupId', 'PropertyGroupId', 'PropertyGroupId', 城市名,
我相信由于 API 的作業方式,它正在制作一個嵌套字典,其中第一個鍵被標記為results,最后一個鍵被標記為next_page_url。
因此,我相信在將字典轉換為帶有 Pandas 的 csv 時,它會將我所有必須處理屬性資料的鍵放在它們自己的列中。這是我想改變的事情。我當前轉換后的 csv 輸出如下所示。
results next_page_url
0 {'Property': '1020p - 1024 N. roadname Pkwy. St... NaN
1 {'Property': '1020p - 1024 N. roadname Pkwy. St... NaN
2 {'Property': '1020p - 1024 N. roadname Pkwy. St... NaN
3 {'Property': '1020p - 1024 N. roadname Pkwy. St... NaN
4 {'Property': '1020p - 1024 N. roadname Pkwy. St... NaN
.. ... ...
639 {'Property': 'putinvest - 4240 something Ave.... NaN
640 {'Property': 'putmgr - 4240 something Ave. St... NaN
641 {'Property': 'z4184p - 4184 Something Ave. Jo... NaN
642 {'Property': 'z4400p - 4400 Boardwalk Name St. ... NaN
643 {'Property': 'z4514 - 4514 something Ave. St. Lo... NaN
[644 rows x 2 columns]
理想情況下,API 中的每一列(例如 PropertyName、Tenant、PropertyAddress 等)都將在 csv 中擁有自己的列。誰能告訴我如何以這種方式格式化它?
謝謝!
uj5u.com熱心網友回復:
你需要next_page_url在最終的CSV嗎?
你試過這樣做嗎?
df = pd.DataFrame(test["results"])
uj5u.com熱心網友回復:
我在那個 .json 示例中使用的格式有問題,但實際上您可以使用您匯入的 json 庫以更簡單的方式解決這個問題。
我通常通過保存請求回應來解決這個問題:
response = requests.request("GET", new_url, headers=headers, data=payload)
然后我使用 .loads() 函式將它加載到 python 字典中,然后你可以索引。
results = json.loads(response.text)['results'][0]
會給你
[{'Property': '1020p - 1024 N. roadname Pkwy. Cityname, XX 12345', 'PropertyName': '1020p', 'PropertyGroupId': '418024, 418031, 418057, 418068, 418069, 418073, 418077rykAddress:'P.100', 'PropertyGroupId' Cityname, XX 12345', 'Unit': 'Commercial- Loop Lofts Unit B', 'Tenant': 無, 'BdBa': '--/--', 'SquareFt': '4,888', 'MarketRent': ' 4,000.00', 'Rent': None, 'MoveIn': None, 'MoveOut': None}, {'Property': '1020p - 1024 N. roadname Pkwy。Cityname, XX 12345, 'PropertyName': '1020p', 'PropertyGroupId': '418024, 418031, 418057, 418068, 418069, 418073, 418077777777777w.p', 'PropertyGroupId', 'PropertyGroupId', 'PropertyGroupId', 城市名稱, XX 12345', '
然后,由于列具有相同的名稱,因此就像使用 Pandas 創建一個 df,然后將其轉換為 csv 一樣簡單。
pd.DataFrame(results).to_csv('~/filename.csv')
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/388859.html
下一篇:從json解碼html字串
