[英]Replace function not working when ran directly from python-requests reponse
我有一些代碼可以處理通過API接收的一些json數據。 json的格式不正確,但是我已經得到它來處理響應,以便我可以正確地將列和相應的行工作並輸入到pandas數據框中。
但是,在處理列名稱時,看起來好像在列名稱中包含了一些我不想使用的特殊字符(括號和逗號)。
如果我處理與計算機上保存的文件相同的json數據,或者查詢了mssql服務器以獲取數據(我將這些數據從API保存到MSSQL實例中,以便在另一個程序中進行處理),運行.replace函數,可以獲取它來擺脫多余的字符。
但是,如果我直接將請求響應數據處理到pandas數據框中,然后嘗試在列名上使用.replace函數,則該函數將無效。 它要么什么都不做,要么將起作用,但是它將所有列名稱返回為NaN。
我已經測試了很多東西,包括使用正則表達式,並瀏覽了其他文章,這些文章可能會有所幫助,但一直無法正常工作。
我嘗試使用replace函數將列名作為列表獲取,然后從列表中重命名列名,但這也給我一個錯誤,即長度不匹配。 如果可能的話,我寧願不走第二條路,這樣我可以使代碼更小。
##This function processes the json file from the desktop
def processJsonFile(jsonFile):
##Unpack json file
with open(jsonFile) as f:
data = json.loads(f)
##unpack rows
df_rows = json_normalize(data, record_path=['rows'])
df_rows.columns = data['columnNames']
return df_rows
##This is the function that processes the json data from the api response
def processJsonResponse(jsonFile):
##Unpack json response
data = json.loads(jsonFile)
##unpack rows and columns into the dataframe
df_rows = json_normalize(data, record_path=['items',['rows']])
df_rows.columns = json_normalize(data, record_path=['items',
['columnNames']])
return df_rows
##process response into dataframe
##df = processJson("incidents.json")
df = pd.DataFrame (columns = {"(id,)","(lookupName,)","(createdTime,)"})
##Remove extra values
df.columns = df.columns.str.replace(r'[^a-zA-Z ]\s?', '')
使用上面的代碼,如果我使用不正確的列名創建了數據框,然后運行了replace函數,它將起作用並刪除逗號和括號。 如果我通過了events.json文件(與我測試過的創建的數據框具有相同的列名),然后運行replace函數,它將按預期工作。
但是,如果我從我的API中獲取get請求響應,並將該響應的文本或內容傳遞給processJsonResponse函數,然后嘗試運行.replace函數,它將無法正常工作。 它只是什么都不做,或者將列名替換為“ NaN”,所以這無濟於事。
最好是我只想通過響應並能夠正確格式化列名稱,而不必將響應另存為文件,然后打開並處理它,並且我不希望將列數據傳遞給列表,格式化列表,然后將其作為列名傳遞。 第二個選擇一直使我遇到一些數組長度不匹配的問題。
我返回的json數據與此類似。
{
"tableName": "incidents",
"count": 4,
"columnNames": [
"id",
"lookupName",
"createdTime",
"updatedTime"
],
"rows": [
[
"100",
"1",
"2015-01-01T00:14:42.000Z",
"2017-05-02T14:01:03.000Z"
],
[
"101",
"2",
"2015-01-01T00:22:56.000Z",
"2015-01-01T04:34:35.000Z"
],
[
"102",
"3",
"2015-01-01T00:29:09.000Z",
"2015-01-01T00:29:09.000Z"
],
[
"103",
"4",
"2015-01-01T00:40:35.000Z",
"2015-01-01T00:40:35.000Z"
]
]}
在通過API請求響應數據進行處理時,有關此操作為何如此奇怪的任何幫助或見解將不勝感激。
API請求是使用請求庫發出的,是對oracle數據庫API的GET請求。 發送回的數據為JSON格式。
我能夠解決它.....結束
哈哈,jk
通過將列數據幀發送到列表,在列表上運行正則表達式來替換不需要的字符,然后將該列表設置為列名稱,我能夠解決此問題。 以下是修復問題的方法。
columnlist = columnNames[0].to_list()
columnlist = [re.sub("[:\-() ]","",x) for x in columnlist]
df_rows.columns = columnlist
謝謝所有看過此書的人。
對此的更新是我根本不需要正則表達式替換。 發送到列表,然后直接發送到數據框列似乎不包含那些特殊字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.