編譯:老齊
與本文相關的圖書推薦:《數據準備和特徵工程》
在數據科學項目中,通常用Pandas的read_csv或者read_excel從相應文件中讀入數據,此外,對於數據量不大的時候,可能還有下面的情形出現:
import pandas as pddata = {『key1』: values, 『key2』:values, 『key3』:values, …, 『keyN』:values}df = pd.DataFrame(data)
這裡是將一個Python中的字典data轉化為了Pandas中的DataFrame對象,這樣字典就作為了數據源。
上面的操作並不複雜,當然,這裡演示的字典和對DataFrame的要求都是簡單的情形。就一般而言,如果遇到了簡單的數據源,可知通過下面的三步實施:
確定數據要留言數據的格式,從而確定是否能夠用於本文所說的過程。比如下面的數據:
我們需要做的是把這個表格樣式的數據,用Python的字典表示——數據量小,不費事。創建字典把上面的表格,改寫為:data = {'Rank':[1, 2, 3, 4, 5], 'Language': ['Python', 'Java', 'Javascript', 'C#', 'PHP'], 'Share':[29.88, 19.05, 8.17, 7.3, 6.15], 'Trend':[4.1, -1.8, 0.1, -0.1, -1.0]}print(data)
轉化為DataFrame然後,就開始轉化:df = pd.DataFrame(data)display(df)
三步,這是基本操作,比較簡單。但是,有時候你遇到的情況可能比這複雜一些。
比如,如果你要將Python中的OrderedDict對象轉化為DataFrame:
from collections import OrderedDictdata= OrderedDict([('Trend', [4.1, -1.8, 0.1, -0.1, -1.0]), ('Rank',[1, 2, 3, 4, 5]), ('Language', ['Python', 'Java', 'Javascript', 'C#', 'PHP']), ('Share', [29.88, 19.05, 8.17, 7.3, 6.15])])display(data)
到現在為止,我們使用的就是pd.DataFrame(data)實現了轉化。其實,還有一些參數,如果使用了,能夠讓轉化的結果更多樣。
例如,在創建DataFrame對象時,指定行索引,而不是像前面那樣使用默認的數字。
rom collections import OrderedDictdata = OrderedDict([('Trend', [4.1, -1.8, 0.1, -0.1, -1.0]), ('Rank',[1, 2, 3, 4, 5]), ('Language', ['Python', 'Java', 'Javascript', 'C#', 'PHP']), ('Share', [29.88, 19.05, 8.17, 7.3, 6.15])])df = pd.DataFrame(data, index = ['A', 'B', 'C', 'D', 'E'])display(df)
此外,也可以使用columns這個參數,來指定列索引的名稱。
或許,你不需要字典中的所有數據,那就用columns參數進行篩選吧。
from collections import OrderedDictdata = OrderedDict([('Trend', [4.1, -1.8, 0.1, -0.1, -1.0]), ('Rank',[1, 2, 3, 4, 5]), ('Language', ['Python', 'Java', 'Javascript', 'C#', 'PHP']), ('Share', [29.88, 19.05, 8.17, 7.3, 6.15])])df = pd.DataFrame(data, index = ['A', 'B', 'C', 'D', 'E'], columns=['Language', 'Share'])display(df)
在上述的示例中,都是以字典的鍵作為DataFrame中的特徵(列)名稱,下面的示例演示一種旋轉的方式,即鍵作為行索引。
df = pd.DataFrame.from_dict(data, orient='index')df.head()
從上面的輸出結果中可以看到,這時候的列索引,都採用了默認的數字,也可以指定有意義的名稱。
df = pd.DataFrame.from_dict(data, orient='index', columns=['A', 'B', 'C', 'D', 'F'])df.head()
當DataFrame對象創建了之後,可以把它保存為csv文件。
df.to_csv('top5_prog_lang.csv')
很多時候是從CSV等格式的文件中讀取數據,此外,也有可能遇到上面各個示例的情景,需要將字典轉化為DataFrame。
參考資料:https://www.marsja.se/how-to-convert-a-python-dictionary-to-a-pandas-dataframe/