[] 中括號
「取出」之意,其中可以是索引或欄位名。
參考:https://www.learncodewithmike.com/2020/11/python-pandas-dataframe-tutorial.html
new DataFrame
# 建立一個單純空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
# 在資料尾端加入新資料
df.loc[len(df)] = data
# data可以是list(與columns數量一致),也可以是dict(與columns名一至)
addign 增加一欄的資料
#建立一個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 取得所有欄位名
data.columns
> Index(['PRODUCT', 'TEST_PROG', 'LOT', 'WAFER', 'TEST_TYPE', 'YIELD', 'BIN_NAME', 'BIN_RATIO'], dtype='object')
df.columns.values
# 取得一list
修改列名
df = df.rename(columns={'A': 'new_A', 'B': 'new_B', 'C': 'new_C'})
get row size
不能用data.size,這只會取得資料空間大小,而非筆數。
get frist row data
取得第一筆資料(非欄位名行)
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
data.loc[0] # 第一列資料
data.loc[0, 'X'] # 第一列X欄的資料
get out datas by column name
# 取出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
有兩種方法:
for index, row in data.iterrows():
row[fieldA] #value1(第二圈value3)
for index, row in data.iterrows():
row[1] #value2(第二圈value4)
迴圈取row需要使用index時,需視情況先reset_index! 否則index有可能未從頭(原資料過濾或截斷會保留index)。
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
for index, row in data.iterrows():
這方法效率並不好!如果要進行的工作有DataFrame預設方法可處理,盡量不要使用此foreach方式!
filter 過濾
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
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查看所有資料內容。
# 設定DataFrame顯示完整列資料
pd.set_option('display.max_columns', None)