Pandas 数据处理

常规数据处理:

  1. 数据类型转换   
    1.   df.A.astype   str,int, float,long
    2.     百分比      map(lambda  s:'{0:.2f}%'.format(s*100))
    3.   四舍五入,精度控制
    4.   时间类 map 
      1.  string->date pd.to_datetime(s).date()    
  2. 重命名列名    df.rename(columns= xx ,inplace=True)
  3. 排序  df.sort_values(by=['xx','yy'])

  4. 删除列  df.drop('xx',axis=1)
  5. 增加列 
    1.   df['B']=xxx   
    2.   df['B']=df['A'].apply(  )
    3.     df['C']=df[['A', 'B']].apply(lambda x: '_'.join(str(value) for value in x), axis=1)    C=A_B
  6. 拆分列    
    1.   拆json   pd.concat([dt.drop('response_data',axis=1), pd.DataFrame(dt['response_data'].apply(lambda t:eval(t)).to_dict()).T], axis=1)
  7. 填充缺失值   df.fillna(0,inplace=True)
  8. 列名重排序 
  9. 替换值   vals_to_replace = {'Small':'1', 'Medium':'5', 'High':'15'}
    1.    df.replace(   { 'A' :vals_to_replace   }    )       替换多个列数据
    2.   df.A=df.A.map(vals_to_replace )
    3.   df.A.replace(vals_to_replace , inplace=True)
    4.   df.A.update(pd.Series(vals_to_replace ))
  10. 去重  df.dropna()

过滤数据:

  1.  df[ df['A']=='xx' ]   可以 =、>、  <、
  2.  df [ df['A'].isin( [a,b,c ] )   ]    ,  df [~ df['A'].isin( [a,b,c ] )   ]    为取反
  3.    df.query(' xx<A<yy ')
  4.   df.str.contains      或 df['A'].str.contains
    1.   pattern=u'xxyy|zz  df['A'].str.contains(pattern)== False/True
  5.  正则表达式 regex
  6.  以上过滤条件均可以组合,  用 df[  ( df['A']=='xx' )   |   ( df['B'].isin([a,b,c])  & df['C'].contains()     ],   &  和 | ;  多个条件需要单独加 

赋值:  ix, iloc

  1.  df.loc[df[' A '] > a, 'A'] = 1
  2. df.ix[ df.B.isin(['X','Y','Z']), 'A'] = 'T'

 

数据分组、切分、拼接

 

   1 .拼接

    1. 左右 merge   pd.merge(df1,df2,on='A', how=‘left’)    或者  df1.merge(df2,on='A', how='left' )
      1.   index也可以merge ,   pd.merge(df1,df2,left_index=True,right_index=True)
    2. 上下 append   df1.append(df2)       
  1. 切分
    1.  cut     
      1.    pd.cut([1,10],10,right=True)    10等分
      2. bins=[0,50,100,200,500,1000,3000]
        cats=pd.cut(df['A'],bins) ,产生一个cat 新列
    2. qcut
  2.   分组  groupby
    1.    s.groupby('A').filter(lambda s:len(s)>10)['A']
    2.    s.groupby('A').filter(lambda s:len(s)>10)['A'].value_counts()     出现10次以上的计数
    3.    s.groupby('A').filter(lambda s:s['A'].count>10)['A'].value_counts()  出现10次以上的计数  

 

  4.   透视表 pivot_table     

Python数据类型   dict ,list ,tuple, dataframe ,json , str

  1.   list of dict ,dict里面的元素是list       df=pd.Dataframe( dict )
  2.   sql in      str(tuple(list))
  3.   json =json_loads(str)       str->json
  4.   df=json_normalize(json)   json->dateframe   只有一行的dataframe

 数据描述

  1.  size  df[ df['A'] ==xx'].size()         
  2.  value_counts
    1.   后面可以接order
  3.   max,min ,count
  4.  info()  ,describe()

pandas 与 excel 交互

  1. 读取  pd.read_excel(  file_path     )     
    1. 如果不想把某列字符转成数字  converters={'A': str} ,  多见于身份证号,合同编号等等
    2.  sheet_name=' sheet名称' ,sheetname= 0,1,2 编号 。不指定默认第1个sheetname   
  2. xls=pd.ExcelFile( file_path )
    1.        xls.sheet_names   
    2.   xls.parse(xls.sheet_names[i] )
  3. 保存  pd.to_excel( file_path, index=False, encoding='utf-8')  
  4. xls=pd.ExcelWriter( file_path, encoding='utf-8', engine='openpyxl')  
    1.  和3结合能将多个sheet写至一个xls
      df.to_excel(xls, sheet_name='xx',index=False) 
      xls.save()  
    2. encoding 编码,否则中文保存可能报错

 

pandas 与 csv 交互

  1. 读取  pd.read_csv()
  2. 保存 df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False)    指定列,分隔符

 

pandas 与 sql 交互

from  sqlalchemy import create_engine

  1.   读取  pd.read_sql(sql, engine)
  2.   保存  pd.to_sql (name=, engine, if_exists='append' ,chunksize=10000,index=False)
    1.  if_exists
      • fail: If table exists, do nothing.
      • replace: If table exists, drop it, recreate it, and insert data.
      • append: If table exists, insert data. Create if does not exist
    2.  index_col :  column=>index  , index_label: index=>column  
    3.  index=True/False  ,默认是False
    4.  dtype={'date': datetime.date}  ,engine 必须是 sqlalchemy ,不能是MySQLdb   
  3.   自定义插入 
    1.  sql_update = """

      update tabel  set A= %s where B= %s;
      """
      engine.execute(sql_update,df[['A','B']].values.tolist() )
       

 

posted on 2018-03-27 16:25  ≮绝影ミ↖  阅读(703)  评论(0编辑  收藏  举报