常規數據處理:正則表達式
- 數據類型轉換
- df.A.astype str,int, float,long
- 百分比 map(lambda s:'{0:.2f}%'.format(s*100))
- 四捨五入,精度控制
- 時間類 map
- string->date pd.to_datetime(s).date()
- 重命名列名 df.rename(columns= xx ,inplace=True)
-
排序 df.sort_values(by=['xx','yy'])sql
- 刪除列 df.drop('xx',axis=1)
- 增長列
- df['B']=xxx
- df['B']=df['A'].apply( )
- df['C']=df[['A', 'B']].apply(lambda x: '_'.join(str(value) for value in x), axis=1) C=A_B
- 拆分列
- 拆json pd.concat([dt.drop('response_data',axis=1), pd.DataFrame(dt['response_data'].apply(lambda t:eval(t)).to_dict()).T], axis=1)
- 填充缺失值 df.fillna(0,inplace=True)
- 列名重排序
- 替換值 vals_to_replace = {'Small':'1', 'Medium':'5', 'High':'15'}
- df.replace( { 'A' :vals_to_replace } ) 替換多個列數據
- df.A=df.A.map(vals_to_replace )
- df.A.replace(vals_to_replace , inplace=True)
- df.A.update(pd.Series(vals_to_replace ))
- 去重 df.dropna()
過濾數據:json
- df[ df['A']=='xx' ] 能夠 =、>、 <、
- df [ df['A'].isin( [a,b,c ] ) ] , df [~ df['A'].isin( [a,b,c ] ) ] 爲取反
- df.query(' xx<A<yy ')
- df.str.contains 或 df['A'].str.contains
- pattern=u'xxyy|zz df['A'].str.contains(pattern)== False/True
- 正則表達式 regex
- 以上過濾條件都可以組合, 用 df[ ( df['A']=='xx' ) | ( df['B'].isin([a,b,c]) & df['C'].contains() ], & 和 | ; 多個條件須要單獨加
賦值: ix, ilocapp
- df.loc[df[' A '] > a, 'A'] = 1
-
df.ix[ df.B.isin(['X','Y','Z']), 'A'] = 'T'編碼
數據分組、切分、拼接spa
1 .拼接excel
-
- 左右 merge pd.merge(df1,df2,on='A', how=‘left’) 或者 df1.merge(df2,on='A', how='left' )
- index也能夠merge , pd.merge(df1,df2,left_index=True,right_index=True)
- 上下 append df1.append(df2)
- 切分
- cut
- pd.cut([1,10],10,right=True) 10等分
-
bins=[0,50,100,200,500,1000,3000]
cats=pd.cut(df['A'],bins) ,產生一個cat 新列
- qcut
- 分組 groupby
-
- s.groupby('A').filter(lambda s:len(s)>10)['A']
- s.groupby('A').filter(lambda s:len(s)>10)['A'].value_counts() 出現10次以上的計數
- s.groupby('A').filter(lambda s:s['A'].count>10)['A'].value_counts() 出現10次以上的計數
4. 透視表 pivot_table orm
Python數據類型 dict ,list ,tuple, dataframe ,json , strsqlalchemy
- list of dict ,dict裏面的元素是list df=pd.Dataframe( dict )
- sql in str(tuple(list))
- json =json_loads(str) str->json
- df=json_normalize(json) json->dateframe 只有一行的dataframe
數據描述排序
- size df[ df['A'] ==xx'].size()
- value_counts
- 後面能夠接order
- max,min ,count
- info() ,describe()
pandas 與 excel 交互
- 讀取 pd.read_excel( file_path )
- 若是不想把某列字符轉成數字 converters={'A': str} , 多見於身份證號,合同編號等等
- sheet_name=' sheet名稱' ,sheetname= 0,1,2 編號 。不指定默認第1個sheetname
- xls=pd.ExcelFile( file_path )
- xls.sheet_names
- xls.parse(xls.sheet_names[i] )
- 保存 pd.to_excel( file_path, index=False, encoding='utf-8')
- xls=pd.ExcelWriter( file_path, encoding='utf-8', engine='openpyxl')
- 和3結合能將多個sheet寫至一個xls
df.to_excel(xls, sheet_name='xx',index=False)
xls.save()
- encoding 編碼,不然中文保存可能報錯
pandas 與 csv 交互
- 讀取 pd.read_csv()
- 保存 df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False) 指定列,分隔符
pandas 與 sql 交互
from sqlalchemy import create_engine
- 讀取 pd.read_sql(sql, engine)
- 保存 pd.to_sql (name=, engine, if_exists='append' ,chunksize=10000,index=False)
- 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
- index_col : column=>index , index_label: index=>column
- index=True/False ,默認是False
- dtype={'date': datetime.date} ,engine 必須是 sqlalchemy ,不能是MySQLdb
- 自定義插入
- sql_update = """
update tabel set A= %s where B= %s;"""engine.execute(sql_update,df[['A','B']].values.tolist() )