paipai教你pandas教程系列的第1篇文章,DataFrame是表格型的數據類型,有列和行兩個維度,本篇教程講解pandas中DataFrame對列維度上的操作,包括列的選取、新增和刪除。
今天paipai在使用pandas時,遇到了第一個問題,從一份Excel文件中讀取數據,構建為一個DataFrame對象,但是數據中的屬性欄位很多,需要對一些欄位進行取捨,paipai處理完數據之後呢,對Dataframe的列操作,整理了一下,在這裡分享給大家。
為了讓大家理解起來更直觀明了,paipai隱去複雜的列名和數值,用簡單的字母來代替。假設我們的數據如下,並構建成DataFrame。
import pandas as pddata={ 'col1':[11,21,31,41,51], 'col2':[12,22,32,42,52], 'col3':[13,23,33,43,53], 'col4':[14,24,34,44,54], 'col5':[15,25,35,45,55]}df = pd.DataFrame(data)在Jupyter中可以看到df的情況:
下面介紹對列操作的方法
1、DataFrame 列選取,主要有四種方式
1.1) 第一種方法是通過frame['col']的方法來取列,傳入的參數是欄位名稱,如果要取多個欄位的值,可以傳入多個欄位名稱的數組,例如['col1', 'col2']。
1.2) 第二種方法是類似取對象屬性的方法來取值,例如frame.col這樣,paipai這裡要提醒各位小夥伴,第二種方法對列名稱有要求,要求是符合python變量命名規範的,就像對象屬性的命名也要符合python對象的規範一樣。
1.3) loc和iloc函數,loc函數參數傳的是欄位名稱,iloc是欄位的索引。其實loc和iloc在取值上面還有很多好用的方法,我們在後續的文章中會進行介紹,這裡先只介紹列取值上的應用。
2、DataFrame列刪除
2.1 通過del關鍵詞來進行刪除
2.2通過drop方法來刪除
df = df.drop(columns='col1')這兩種方法有什麼區別呢,del刪除是直接在原DataFrame上直接進行操作,而drop方法則不會對原來DataFrame進行修改,返回一個新的DataFrame,除非是將drop方法的inplace參數設置為True,則會直接在原DataFrame上進行刪除。paipai在這裡留個小作業,大家可以想一下,當設置inplace參數時,drop函數的返回值有什麼區別?
3、DataFrame新增列
DataFrame新增列,按照兩種情況,分別是簡單賦值和複雜賦值
3.1 對列的賦值比較簡單,比如單一值,已有的數組等,在這裡介紹2種方法:
# 第一種直接將數組賦值到新欄位df['col6'] = [1,2,3,4,5]# 第二種insert方法# 參數1是插入列的位置# 參數2是欄位為列名# 參數3是列的值 df.insert(0,'col7',[1,2,3,4,5])3.2 當對新增列的賦值邏輯比較複雜,需要根據其他列的值進行計算等,可以將複雜的計算邏輯寫在一個函數中,然後通過apply()方法進行計算,下面通過一個例子來體會一下。
比如我們新增列的值,是要根據需要col1的值加上col2的值,我們先寫一個相加的函數
def sum_number(num1, num2): return num1 + num2然後使用apply方法,其每一行col6的值為col1和col2兩列值的和
df['col6'] = df.apply(lambda x: sum_number(x['col1'], x['col2']), axis=1)該DataFrame更新如下: