天天看点

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)