語義上DF像一個包含一個(類索引的series對象)峦失,getting兑燥,setting上煤,and deleteting 操作和字典一毛一樣
```
```
Columns的刪除和pop也是和字典一毛一樣的
```
```
如果你查插入的series的index和df的index不一致峭火,那么將會以df的index為準。
```
```
你也可以插入原生的ndarrays,但是他們的程度必須和DF的索引的長度相同摊欠。
默認情況下捌显,columns的插入位置一般都在最后,insert方法可以設(shè)置中特定位置插入columns
### 聲明新的列陡厘?抽米??(in method chains)
受dplyr的mtate動詞啟發(fā)糙置,df有一個assign方式云茸,可以讓你輕松根據(jù)已有列創(chuàng)建一個衍生出來的新列
```
```
上面的例子演示的是插入一個預(yù)先計算好的值,我們也可以傳一個可以被df執(zhí)行的function作為參數(shù)谤饭。
```
```
assign返回一個原來數(shù)據(jù)的拷貝标捺,與原來的數(shù)據(jù)是相互獨立不影響的。
傳入一個可被調(diào)用的方法揉抵,而不是真是的數(shù)據(jù)亡容,在你暫時沒有df的reference 的時候特別有用。尤其是在操作鏈中使用assign很常見功舀。例如:我們可以只選SptaplLengh大于5的值計算利率和分布圖萍倡。
```
```
傳入的方法是在df被定義的時候才計算的。更重要的是辟汰,df是篩選后的df列敲,先篩再計算的阱佛。這是一個我們沒有df的reference的例子。
assign方法出入的參數(shù)是**kwargs.key是columns的名字戴而,values是一個值/包含一個參數(shù)的function凑术。返回的是一個df的copy。
warning:
因為assign的參數(shù)是**kwargs,是一個字典所意,所有結(jié)果中的new columns的順序是無法保證的淮逊,默認按照key的字母順序排列。
所有的表達式都是先計算再命名的扶踊。所以你不能在一個assign方法中使用另一個也是被命名的columns泄鹏。比如:
```
```
indexing/ 選擇
基本的indexing方法如下
行選擇,例如秧耗。返回的是一個index是df的columns的Series對方备籽。
```
```
關(guān)于indexing和切片的詳情見section on indexing.關(guān)于原理層面的東西見section of reindexing .
###?
不同的df對象會根據(jù)columns和index自動匹配。結(jié)果生成的對象是二者的并集分井。
```
```
當df和series對象操作的時候车猬,會自動匹配series的index到df的columns。然后再把這個動作擴展到其他行尺锚。
```
```
當數(shù)據(jù)中含有time格式的serise珠闰,并且df的index包含時間,將會按照列擴展瘫辩。
warning:
df - df['A']
目前不贊成這樣伏嗜,以后的版本會挪去。推薦的方式如下:
df.sub(df('A'),axis=0)
更多關(guān)于匹配和擴展的操作見flexible binary operations
```
```
當然也可以實現(xiàn)布爾操作
```
```
### 轉(zhuǎn)置
使用T屬性就可以了杭朱。和ndarray的T屬性相同阅仔。
### 使用numpy的一些方法
numpy的一些元素智能的方法用在df身上完全沒有問題,假設(shè)包含的數(shù)據(jù)是數(shù)值性的弧械。
```
```
dot方法實現(xiàn)矩陣乘法
```
```
類似的八酒,sries的dot方法完成的是dot結(jié)果
```
```
df設(shè)計的初衷并不是去取代ndarray的。這是因為df的索引語義會根據(jù)在矩陣中位置的不同有很大的區(qū)別刃唐。
### 控制臺信息的輸出
數(shù)據(jù)量很大的df對象會在展示的時候自動刪減掉一部分再展示羞迷。info方法可以看df的概覽情況。
使用to_string方法將會返回一個表格形式的字符串画饥。雖然顯示上面長度沒有匹配到console
```
```
比較寬的df展示的時候?qū)坌小?/p>
設(shè)置display.width來空置每行展示多少衔瓮。
設(shè)置display.max_colwidth來控制每列的顯示長度。
通過expand_frame_repr選項來禁止上面的設(shè)置生效抖甘。顯示出來的將會是一個塊信息热鞍。
### df列屬性的獲取 和 ipython的自動補全。
如果df的列標簽是一個有效的python變量名∞背瑁可以通過獲取屬性的那種樣式去獲取數(shù)據(jù)
```
```
這些列也可以通過ipython中的自動補全偷办。
### panel
警告:在0.20.0版本中,panel不贊成使用而且后期將會被取消澄港。詳見Deprecated Panel
panel某些程度上甚少用到椒涯,但仍是很重要的3維數(shù)據(jù)的容器。penel data是從計量經(jīng)濟學衍生出來的回梧,也是跟pandas的名字相關(guān)的:pan(el)-da(ta)-s.3個軸的名字也是為了對包括panel數(shù)據(jù)的操作上面提供一些語義上的說明废岂。然而,為了切片df對象狱意,axis的名字有些被df獨用了湖苞。
items: XXX
major_axis:XXX
minor_axis:XXX
Panel的構(gòu)建方式正如你所期望的那樣:
### from 3D ndarray?
```
```
### from dict of DF objects
注意,字典中的values必須能轉(zhuǎn)化為DF,因此详囤,他們可以是上面任意一種有效的輸入來生成DF
一個有用的工廠方法是 Panel.from_dict袒啼。參數(shù)為一個DF的字典。剩下的參數(shù)如下:
例如纬纪,與上面的構(gòu)造方式來相比:
```
```
orient對與多類型的DF對象來說很有用,如果你傳入的是一個包含多類型columns的df的字典滑肉,所有的數(shù)據(jù)都會當作dypte=object包各。除非你傳入了參數(shù) orient='minor'
注意:Panle使用頻率不如series和df,在功能使用上常常被忽視,df中的很多方法還不能在Panel中使用靶庙。
### from df 使用to_panel方法
to_panel 把一個df對象轉(zhuǎn)換成一個兩級index的Panel對象问畅。
```
```
# 元素的 選擇/增加/刪除
df的操作把他當作是一個包含series的字典。類似的六荒。Panel就是一個包含df的字典护姆。
the 增加和刪除的API 和df一樣。正如df一樣掏击,如果里面的元素是一個有效的python變量名卵皂,你可以通過像屬性一樣去獲取它并且在ipython中完成自動補全。
### 轉(zhuǎn)置
通過他的transpose方法可以重排列一個Panel對象
### 索引/選擇
例如砚亭,使用前面的例子當中的數(shù)據(jù)灯变,我們可以:
```
```
### 擠壓
修改一個object的維度的另一個方式就是squeeze一個長度為1的對象。像wp['item']
```
```
### 轉(zhuǎn)換成df
Panel也可以以2d的形式展現(xiàn)捅膘,即一個包含多層的index的df添祸,點擊這里。如果想要把一個Panel變成一個df,使用to_frame 方法:
```
```
### 一些反對的聲音
過去幾年pandas的在工具覆蓋范圍和使用深度方面都取得了很大的發(fā)展:引入了很多的特性寻仗,同時也支持更多的數(shù)據(jù)類型刃泌;也支持更多的方法使用。但是這些為了這些高效的索引和方法的運行使用而做的努力,也使得pandas的代碼庫漸漸開始變得分散化耙替,同時也慢慢變得不易于理解亚侠。
Panle的3維數(shù)據(jù)結(jié)構(gòu)與1維的series和2維的df有很大的不同。
相于其他類型的數(shù)據(jù)分析語言林艘,Panel的三維結(jié)構(gòu)比1-D的series或2-D的DataFrame代碼量上要小得多盖奈。面向未來,pandas專注于這些數(shù)據(jù)分析領(lǐng)域是非常非常有意義的狐援。
通常钢坦,您可以簡單地使用多索引DataFrame來輕松處理更高維度的數(shù)據(jù)。
另外啥酱,xarray包也是一點一點構(gòu)建起來的爹凹。特別是為了支持多維的數(shù)據(jù)分析,這也是panel一個常見用例镶殷。xarray和panel的相互轉(zhuǎn)化詳情見這里禾酱。
```
```
或者你也可以轉(zhuǎn)成xarray 類型的DataArray
```
```
完整文檔見這里。
### Panel 4D 和 ND (不建議)
### 警告:
在0.19.0 Panel4D和ND是不建議使用绘趋,并且在以后的版本中會被移除颤陶。推薦用xrray包來表示多維的數(shù)據(jù)。pandas提供了一個to_xarray方法來自動完成轉(zhuǎn)換陷遮。
更之前的版本文檔見這里滓走。