Pandas幾個星期不用,差不多又快全部忘記了。便於記憶,還是寫一些痕跡,加深記憶。
參考鏈接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.from_dict.html
這是一個類方法,創建一個df對象。
Parameters
- data dict
-
Of the form {field : array-like} or {field : dict}.
- orient {‘columns’, ‘index’}, default ‘columns’
-
The “orientation” of the data. If the keys of the passed dict should be the columns of the resulting DataFrame, pass ‘columns’ (default). Otherwise if the keys should be rows, pass ‘index’.
- dtype dtype, default None
-
Data type to force, otherwise infer.
- columns list, default None
-
Column labels to use when
orient='index'
. Raises a ValueError if used withorient='columns'
.
對於參數的設置,datadict在默認下,傳入參數為{key: {key: value}}或者{key:[...]}
這樣的情況下,使用默認的orient屬性,key將當做columns使用。
In [22]: mydict = {'name':{1:'sidian'},'age':{2:'18'}} In [23]: pd.DataFrame.from_dict(mydict) Out[23]: name age 1 sidian NaN 2 NaN 18
這是使用了字典嵌套字典的寫法,外層字典的key為columns,values內的dict的keys為rows的名稱,缺省的值用了NAN
當修改orient的默認值'columns'為'index',內部的key為columns,外部的key為rows
In [25]: pd.DataFrame.from_dict(mydict,orient='index') Out[25]: 1 2 name sidian NaN age NaN 18
當時使用字典嵌套字典的時候,設置了orient='index'后,通過設置columns只會顯式,在原df中已經存在的columns
In [29]: pd.DataFrame.from_dict(mydict,orient='index', columns=[2,3]) Out[29]: 2 3 age 18 NaN In [30]: pd.DataFrame.from_dict(mydict,orient='index', columns=[3,4]) Out[30]: Empty DataFrame Columns: [3, 4] Index: []
pd.DataFrame.from_dict的類方法在使用字典套字典的形式還是比較特別的,下面使用鏈接中的案例key與list的形式。
In [32]: data = {'col_1': [3, 2, 1, 0], 'col_2': ['a', 'b', 'c', 'd']} In [33]: pd.DataFrame.from_dict(data) Out[33]: col_1 col_2 0 3 a 1 2 b 2 1 c 3 0 d
這個rows的編號,自動生成,keys為columns的名稱。
設置orient='index',key將變成rows的index,rows會變成默認的0,1,2,3...
In [34]: pd.DataFrame.from_dict(data,orient='index') Out[34]: 0 1 2 3 col_1 3 2 1 0 col_2 a b c d
通過設置columns,來替換顯式的默認columns的名稱.
In [35]: pd.DataFrame.from_dict(data,orient='index',columns=list('abcd')) Out[35]: a b c d col_1 3 2 1 0 col_2 a b c d
工作中碰到,就是一個普通的dict,也就是說value是不可迭代的對象,必須設置orient='index',要不然會報錯,也就是dict的key不能用於columns。
In [41]: new_dict Out[41]: {'name': 'sidian', 'age': 18} In [42]: pd.DataFrame.from_dict(new_dict, orient='index') Out[42]: 0 name sidian age 18 In [43]: pd.DataFrame.from_dict(new_dict, orient='index', columns=['info']) Out[43]: info name sidian age 18 In [44]: