[] 中括號
「取出」之意,其中可以是索引或欄位名。
參考:https://www.learncodewithmike.com/2020/11/python-pandas-dataframe-tutorial.html
new DataFrame
Copy # 建立一個單純空DataFrame
df = pd . DataFrame ()
# 建立一個指定column但無資料的DataFrame
df = pd . DataFrame (columns = [ 'colA' , 'colB' , 'colC' ])
# 已經有資料的狀況建立為一個DataFrame
df = pd . DataFrame ({ 'colA' : 'valA' , 'colB' : 'valB' , 'colC' : 'valC' })
set data
Copy # 在資料尾端加入新資料
df . loc [ len (df)] = data
# data可以是list(與columns數量一致),也可以是dict(與columns名一至)
addign 增加一欄的資料
Copy #建立一個DataFrame
result = pd . DataFrame ({ 'fieldX' : [ 17.0 , 25.0 ]}, index = [ 'AAA' , 'BBB' ])
> fieldX
> AAA 17.0
> BBB 25.0
# df增加欄「fieldY」,值為「fieldX的值+1.1」
result = result . assign (fieldY =lambda x : x.fieldX + 1.1 ) # assign會對每一列執行lambda,並將該列作為變數傳入(x),回傳值放入宣告的新欄位(fieldY)中
> fieldX fieldY
> AAA 17.0 18.1
> BBB 25.0 26.1
參考:https://www.gairuo.com/p/pandas-assign
get out columns name 取得所有欄位名
Copy data . columns
> Index ([ 'PRODUCT' , 'TEST_PROG' , 'LOT' , 'WAFER' , 'TEST_TYPE' , 'YIELD' , 'BIN_NAME' , 'BIN_RATIO' ], dtype = 'object' )
df . columns . values
# 取得一list
修改列名
Copy df = df . rename (columns = { 'A' : 'new_A' , 'B' : 'new_B' , 'C' : 'new_C' })
get row size
不能用data.size,這只會取得資料空間大小,而非筆數。
get frist row data
取得第一筆資料(非欄位名行)
Copy data.loc[0] # 取得「index=0」的資料
data['30'].loc[0] # 取得「欄位名=30 index=0」的資料
index有可能不是流水,要看資料實際的index
sql取出或自行append的預設會是流水,但也有可能合併之類的操作導致跳號重號,要注意!
https://www.delftstack.com/zh-tw/howto/python-pandas/pandas-get-first-row-of-given-column/
get row by index
Copy data . loc [ 0 ] # 第一列資料
data . loc [ 0 , 'X' ] # 第一列X欄的資料
get out datas by column name
Copy # 取出DataFrame中多個欄位的資料(return一個新DataFrame)
new_df = df [ [ 'COMPONENTID' , 'SPEC_LOW' , 'SPEC_HIGH' ] ]
get out data from row
範例用data如下
fieldA fieldB
row1 value1 value2
row2 value3 value4
有兩種方法:
Copy for index , row in data . iterrows ():
row [ fieldA ] #value1(第二圈value3)
Copy for index , row in data . iterrows ():
row [ 1 ] #value2(第二圈value4)
迴圈取row需要使用index時,需視情況先reset_index! 否則index有可能未從頭(原資料過濾或截斷會保留index)。
Copy for index , row in df . reset_index (). iterrows ():
# df.reset_index(drop=True) 可直接處理df本體(但return是None!)
# 另有參數inplace尚未確定怎麼用 df.reset_index(drop=True, inplace=True)
獲取某列中唯一值
foreach
Copy for index, row in data.iterrows():
這方法效率並不好!如果要進行的工作有DataFrame預設方法可處理,盡量不要使用此foreach方式!
filter 過濾
Copy filter = data [ 'PRODUCT' ] == 'XXX' # 建立過濾器是「data的PRODUCT欄位值= XXX 」的
data = data [ filter ] # data=套用過濾器取出的資料
data = data [ data [ 'PRODUCT' ] == 'XXX' ] # 簡短的寫取出A欄位中值非None的資料列
EX
取出A欄位中值非None的資料列
取出AB欄位中值皆非None的資料列
第三維度
DataFrame 是一個二維表格結構,因此在一個 DataFrame 中,資料只會以行和列的方式顯示,並沒有第三個維度。
可以將一個 DataFrame 中的某一欄位或某一列視為另一個 DataFrame,這樣可以將 DataFrame 組合起來形成更複雜的結構。
EX
Copy import pandas as pd
# 建立一個 DataFrame
df = pd . DataFrame ({ 'A' : [ 1 , 2 , 3 ], 'B' : [ 4 , 5 , 6 ], 'C' : [ 7 , 8 , 9 ]})
# 取出 df 中的第 2 列,並轉換為矩陣
matrix = df . iloc [ 1 ]. values . reshape ( 1 , - 1 )
在這個例子中,我們從 DataFrame df
中取出了第 2 列,然後將它轉換為一個矩陣,並輸出。
這樣就可以將 DataFrame 轉換為一個矩陣,然後進行相關的操作。
然而,需要注意的是,這裡的矩陣不再是一個完整的 DataFrame,只是 DataFrame 中某一部分的資料,因此不能再進行 DataFrame 相關的操作,例如新增或刪除列等操作。
顯示完整資料
如果是在pycharm開發,直接在debug模式下,點開資料的view,就可以查看到table樣式的資料。
當資料欄位多,又想要用print查看所有資料內容。
Copy # 設定DataFrame顯示完整列資料
pd . set_option ( 'display.max_columns' , None )
Last updated 11 months ago