Debug: django model querysets-> pandas.Dataframe

問題描述

在使用Django 的ORM model時,有時需要將數據導出並轉變成pandas DataFrame。正常的流程應該是:

import pandas as pd
from model import testeModel

data = testModel.objects.values()
# .values()返回的是[object1,object2]
df = pd.DataFrame(data)

但是系統一直會報錯,出錯信息如下:

Traceback (most recent call last)
/usr/local/lib/python3.4/dist-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy)
    copy=False)
else:
    raise ValueError('DataFrame constructor not properly called!')
ValueError: DataFrame constructor not properly called!

解決方案

雖然報的是值錯誤,很容易讓人以爲是data數據錯誤。

更隱晦的是即時數值格式都正確,還是會報上述錯誤,調試後發現這個ValueError錯誤指的是傳入的data數據的格式。一直以爲是list(例如[{‘name’:’hello’},{‘name’:’world’}]),畢竟print出來就是這個樣子,其實testModel.objects.values()返回的實際類型是:

<class 'django.db.models.query.ValuesQuerySet'>

而這個ValuesQuerySet也支持python的for…in…遍歷操作,這就是很容易遺漏的地方。知道後簡單的格式轉換就可以解決:

import pandas as pd
from model import testeModel
# success
data = testModel.objects.values()
df = pd.DataFrame(list(data))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章