DataFrame是一個二維標記數據結構,具有可能不同類型的列。您可以將其視爲電子表格或SQL表,或Series對象的字典。它通常是最常用的pandas對象。與Series一樣,DataFrame接受許多不同類型的輸入:
1.1D ndarray,list,dicts或Series的Dict
2.二維numpy.ndarray
3.結構化或記錄 ndarray
4.Series
5.DataFrame
沒我們想象的那麼複雜,對於DataFrame的操作無非也就是增刪改查
。我們也經常將DataFrame稱之爲數據幀。
DataFrame的使用方法如下:
DataFrame(columnsMap)
pandas.DataFrame( data, index, columns, dtype, copy)
data
:上面介紹的各種數據類型
index
:行標籤,可選缺省值np.arrange(n)
columns
:列標籤,可選缺省值 np.arange(n)
dtype
:列的數據類型
copy
:默認值爲False,則此命令(或任何它)用於複製數據。
創建一個空的DataFrame:
從list或者1D ndarray構建
通過index和columns屬性分別訪問行標籤和列標籤
指定行列索引
訪問列:變量名[列名]
訪問行:變量名[n:m] 訪問從n開始到m-1行的數據
同樣也可以通過索引名來訪問:
訪問行和列(塊):
變量名.iloc[n1:n2,m1:m2] 訪問n1到(n2-1)行,m1到(m2-1)列
訪問指定位置:變量名.at[行名,列名]
如果key不存在的話,會報如上錯誤。
訪問指定位置:變量名.loc[行索引名,列索引名]
使用字典dict
如果使用單純的字典數據,那麼一定要記得
指定index
,否則會報錯。
使用來自Series 的 dict
得到的索引將是各個Series的索引的並集。如果有任何嵌套的dict,則首先將這些dicts轉換爲Series。如果沒有傳遞列,則列將是dict鍵的有序列表。
如果Series的長度不同,並且具有不同的索引,那麼會是什麼情況呢?
如果兩者部分索引相同呢?
大家可以看到得到的索引將是各個Series的索引的並集,結合上面的例子,想必大家都理解了。
當我們在DataFrame的構造函數中指定列的時候,那麼該值會覆蓋dict的鍵值作爲列的索引名。否則會默認將dict的鍵值作爲列的索引名。
這裏我們重新將列進行命名,在構造DataFrame的時候,在數據d中找不到以’姓名’和’年齡’爲鍵值的數據,所以最後的結果爲空。
做個比較:
那麼如果我們的行索引也是完全不同的呢?
最終的結果好像和我想的不一樣。。。再試一下,追加個Series中的索引名。
額,看樣子得這麼說了:DataFrame構造函數中指定的行列索引優先於dict。
使用dict列表
這個就不多做解釋了,上面的都能看懂,這個自然不在話下了。
使用元組和元組字典
Python 的元組與列表類似,不同之處在於元組的元素不能修改。
元組使用小括號,列表使用方括號。
元組創建很簡單,只需要在括號中添加元素,並使用逗號隔開即可。
替代構造函數:DataFrame.from_dict
DataFrame.from_dict採用dicts的dict或類似數組序列的dict並返回DataFrame。DataFrame除了默認情況下的orient參數外,它的操作類似於構造函數’columns’,但可以將其設置’index’爲使用dict鍵作爲行標籤。
DataFrame.from_records
DataFrame.from_records獲取元組列表或帶有結構化dtype的ndarray。它類似於普通DataFrame構造函數,但生成的DataFrame索引可能是結構化dtype的特定字段。
這個有點可能有點複雜,關於dtype的的一些東西可以參考下面的鏈接
https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html
獲取,設置和刪除列的工作方式與類似的dict操作相同,這裏就不在做更多的演示。
插入標量值
插入標量值得時候,它會沿着列進行填充
assign()
DataFrame有一種assign() 方法可以讓您輕鬆創建可能從現有列派生的新列,它始終返回數據的副本,保持原始DataFrame不變。
轉置 DataFrane.T
DataFrame列屬性訪問
如果DataFrame列標籤是有效的Python變量名稱,則可以像屬性一樣訪問該列:
注意:僅限於列,用在行會出錯的。
to_string() 將以表格形式返回DataFrame的字符串表示形式
使用info()獲取摘要