【Python】Pandas 小記

NumpyPandas

參考資料

===== Dataframe的操作 =====

# dataframe初始化
df = pd.DataFrame() 
df = pd.DataFrame(columns=['symbol','xxx', 'price'])

#附加一列數據 
a = { 'a':1, 'b':1, 'c':1 } 
df = df.append(a, ignore_index=True) 

#刪除數據 
df.dropna(axis=0, how='any') 

#替換數據 
df.replace(to_replace=None, value=None) 

#轉置矩陣 
df.T 

#刪除欄位 
df = df.drop('Name', axis=1) #axis=0,代表列; axis=1,代表行 

#欄位的重新排序
#原本欄位順序a,b,c,d,改為b,a,d,c
df.reindex(

#顯示有哪些欄位 
df.columns 

#修改欄位名稱 
df.rename(columns = {'舊欄位名稱1': '新欄位名稱1', '舊欄位名稱2': '新欄位名稱2'}, inplace = True) 


#新增欄位 
df.insert(index, '欄位名稱', ) 

#顯示資料相關資訊 
df.info() 
df.info(memory_usage='deep') #顯示記憶體使用狀況

===== Traversal =====

#DataFrame
for item in dfA.iterrows():
  xxx

#List
for item in listA.items():
  xxx

#Array
for item in arrayA:
  xxx

===== 檔案操作 =====

#Read CSV 
pd.DataFrame.from_csv("csv_file") 
pd.read_csv("csv_file") 

#Write CSV 
df.to_csv("data.csv", sep=",", index=False) 
#Read Excel 
pd.read_excel("excel_file") 

===== 資料操作 =====

df.groupby('XXX').count() #每個類別的數量 
df.groupby('XXX').mean() #每個類別的平均 
df.groupby('XXX').std() #每個類別的標準差 
df.groupby('XXX').median() #每個類別的中位數 
df.replace('XXX', 'YYY', inplace=True) #修改df中欄位A裡,所有值為XXX的改為YYY 

#inplace=True代表直接替換掉原數據 
df['A'].replace('XXX', 'YYY', inplace=True) 

#修改多個值。所有df中的XXX改為0.1,YYY改為0.2  
df.replace({'XXX':0.1},{'YYY':0.2}) 

#修改多個值。所有df中的XXX或YYY改為0.1 
df.replace(['XXX','YYY'], 0.1) 

#透過正規表示法來修改數值。將df中所有數值為A~Z的內容改為0.1  
df.replace('[A-Z]',0.1, regex=True) 

#將df中A欄位裡的所有XXX改為YYY 
df['A'].str.replace('XXX','YYY')

===== 其他操作 =====

#產生一個dataframe 
datesframe = pd.date_range('20200101', periods=6) pd.DataFrame(np.arrange(24).reshape((4,6)), index=datesframe, columns=['A', 'B', 'C', 'D']) 

#選擇欄 
df['A'] or df.A 

#根據標籤選擇 - loc 
df.loc(:,['A','B'] #取得所有的列欄位'A'與欄位'B'的資料 
df.loc('20200101',['A','B']] #取得列20200101的欄位'A'與欄位'B'資料 
df.loc['20200101'] #取得列20200101的所有欄位資料 

#根據序列選擇 - iloc (位置從0算起) 
df.iloc[3,1] #取得第4列、第2行的資料 
df.iloc[3:5,1:3] #取得第4~5列、第2~3欄的資料 
df.iloc[[1,3,5],1:3] #取得第1,3,5列、第2~3欄的資料 

#混合選擇 - ix 
df.ix(:3,['A',C'] #取0~2列、'A''C'兩欄的資料 

#條件式篩選 
df[df.A>8] #列出所有'A'欄位>8的所有資料列 

#從dict中取值 
def get_key(val): for key, value in my_dict.items(): if val == value: return key return "key doesn't exist" 

#過濾資料的日期 
mask = df['date']==datetime.strptime('2021-02-26', '%Y-%m-%d').date() df[mask] 

#過濾資料的日期區間-三種方式 
mask = (df['col'] > start_date) & (df['col'] <= end_date) 
df[mask] 

df.query("Joined_date >= '2019-06-1' and Joined_date <='2020-02-05'") 

mask=df["Joined_date"].isin(pd.date_range('2019-06-1', '2020-02-05')) df[mask] 

#取出一個dataframe的子集合,取出2~4列,b、d兩欄 
df[2:4][['b','d']]

===== DataFrame合併 =====

Concat(會保留重複index)