天天看點

pandas 入門

  • pandas 資料結構
    series(一維), DataFrame(二維), Panel(少用)
  • 輸出不顯示省略号
# 行或列的數量多的時候,pandas 的輸出會預設用省略号代替
pandas.set_option('display.max_rows',None)
pd.set_option('display.max_colwidth',None)
           
  • 建立
order_list = [
    {'order_id': , 'price': , 'date': '2018-01-01'},
    {'order_id': , 'price': , 'date': '2018-01-02'},
    {'order_id': , 'price': , 'date': '2018-01-05'},
    {'order_id': , 'price': , 'date': '2018-01-01'},
]

import pandas as pd
df = pd.DataFrame(order_list)
# >>> 
         date  order_id  price
  --             
  --             
  --             
  --             
# 橫向的稱為列(column), 縱向的稱為索引(index)

# 使用 list(dict) 生成,dict的key為column, index自動遞增生成
# 使用 嵌套字典生成,外層key為column, 内層key為index 

# 也可以命名行和列
import numpy as np
df = pd.DataFrame(np.arange().reshape((,)), index=['one', 'two', 'three', 'four'], columns=['a', 'b', 'c', 'd'])
# >>>
        a   b   c   d
one              
two              
three          
four         
           
  • 選取
# 根據column選取一列, 傳回一個Series
df['order_id']
# >>>
    
    
    
    

# 可以同時選擇多列
df[['order_id', 'price']]

# 用index選擇單行,或用切片方式選擇多行
df[['order_id', 'price']][:]
           
  • 條件篩選
df[df['price'] > ]
# >>>
         date  order_id  price
  --             
  --             

# isin 和取反
df[~df['order_id'].isin(['1','2'])]
           
  • 修改
# 删除列
df.drop('price')

# 添加列
df['month'] = df['date'].apply(lambda x : str(x)[:])
# 替換
df.replace({"2003-05-10": "2008-08-08"}, regex=True, inplace=True)
           
  • 基本屬性
df.dtypes  # 每列資料類型
df.shape  # 行數列數
df.columns.values # 列名
df.values
           
  • 常用函數
df['price'].sum()

# 類似的有
count, max, min, mean
sort_values(['column'], ascending=False)
reset_index() # 重建立立索引
drop_duplicates() # 去重
           
  • 聚合後排序
df.groupby(['departure'])['tkt_nbr'].count().reset_index().sort_values(['tkt_nbr'], ascending=False).reset_index()
           
  • join
# right join
right_join_df=df.merge(right=df2, how="right", on="id")
# 或
right_join_df=df.merge(right=df2, how="right", left_on="id",right_on="id")

# how可選: 'left', 'right', 'inner', 'outer'

           
  • 檔案讀取
df=pd.read_csv(filePath,sep=',',names=['colNameA','colNameB'...])
df=pd.read_json(filePath, lines=True)
df=pd.read_sql(sql=sql,con=conn)
           
  • 檔案儲存
df.to_csv("csvResult.csv",index=False,header=True,sep=',',encoding='utf-8-sig')
df.to_json(path_or_buf="jsonData.json",orient='records', lines=True)