不少人都分不清Numpy,Scipy,pandas三個庫的區別。html
在這裏簡單分別一下:python
目前來講,隨着Pandas更新,Numpy大部分功能已經直接和Pandas融合了。mysql
若是想了解Numpy的話,可點擊閱讀《Python之Numpy的基礎及進階函數(圖文)》。sql
# 導入別名 import pandas as pd pd.Series([1,2,3,4])
read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=False, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=False, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)數據庫
# 讀取csv,參數可刪 data = pd.read_csv('./data/test.csv',sep = ',',header = 'infer',names = range(5,18),index_col = [0,2],engine = 'python',encoding = 'gbk',nrows = 100)
# 讀取csv,參數可刪 data = pd.read_table('./data/test.csv',sep = ',',header = 'infer',names = range(5,18),index_col = [0,2],engine = 'python',encoding = 'gbk',nrows = 100)
read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, has_index_names=None, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)數組
data = pd.read_excel('./data/test.xls',sheetname='原始數據',header = 0,index_col = [5,6])
建議:用前兩個數據結構
# 讀取數據庫 from sqlalchemy import create_engine conn = create_engine('mysql+pymysql://root:root@127.0.0.1/test?charset=utf8', encoding='utf-8', echo=True) # data1 = pd.read_sql_query('select * from data', con=conn) # print(data1.head()) data2 = pd.read_sql_table('data', con=conn) print(data2.tail()) print(data2['X'][1])
'mysql+pymysql://root:root@127.0.0.1/test?charset=utf8'app
鏈接器://用戶名:密碼@數據庫所在IP/訪問的數據庫名稱?字符集函數
DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression=None, quoting=None, quotechar='"', line_terminator='\n', chunksize=None, tupleize_cols=False, date_format=None, doublequote=True, escapechar=None, decimal='.')post
import pandas as pd data.to_csv('data.csv',index = False)
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)
data.to_excel('data.xlsx',index=False)
DataFrame.to_sql(name, con, flavor=None, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)
from sqlalchemy import create_engine conn =create_engine('mysql+pymysql://root:root@127.0.0.1/data?charset=utf8', encoding='utf-8', echo=True) data.to_sql('data',con = conn)
# 查看前5行,5爲數目,不是索引,默認爲5 data.head() # 查看最後6行,6爲數目,不是索引,默認爲5 data.tail(6) # 查看數據的形狀 data.shape # 查看數據的列數,0爲行1位列 data.shape[1] # 查看全部的列名 data.columns # 查看索引 data.index # 查看每一列數據的類型 data.dtypes # 查看數據的維度 data.ndim
## 查看數據基本狀況 data.describe() ''' count:非空值的數目 mean:數值型數據的均值 std:數值型數據的標準差 min:數值型數據的最小值 25%:數值型數據的下四分位數 50%:數值型數據的中位數 75%:數值型數據的上四分位數 max:數值型數據的最大值 '''
# 取出單獨某一列 X = data['X'] # 取出多列 XY = data[['X','Y']] # 取出某列的某一行 data['X'][1] # 取出某列的某幾行 data['X'][:10] # 取出某幾列的某幾行 data[['X','Y']][:10]
# loc方法索引 ''' DataFrame.loc[行名,列名] ''' # 取出某幾列的某一行 data.loc[1,['X','月份']] # 取出某幾列的某幾行(連續) data.loc[1:5,['X','月份']] # 取出某幾列的某幾行(連續) data.loc[[1,3,5],['X','月份']] # 取出 x ,FFMC ,DC的0-20行全部索引名稱爲偶數的數據 data.loc[range(0,21,2),['X','FFMC','DC']]
# iloc方法索引 ''' DataFrame.iloc[行位置,列位置] ''' # 取出某幾列的某一行 data.iloc[1,[1,4]] # 取出列位置爲偶數,行位置爲0-20的偶數的數據 data.iloc[0:21:2,0:data.shape[1]:2]
# ix方法索引 ''' DataFrame.ix[行位置/行名,列位置/列名] ''' ## 取出某幾列的某一行 data.ix[1:4,[1,4]] data.ix[1:4,1:4]
綜合上述所言,不建議使用ix,容易發生混淆的狀況,而且運行效率低於loc和iloc,pandas考慮在後期會移除這一索引方法
# 修改列名 list1 = list(data.columns) list1[0] = '第一列' data.columns = list1 data['新增列'] = True data.loc['新增一行',:] = True data.drop('新增列',axis=1,inplace=True) data.drop('新增一行',axis=0,inplace=True)
import pandas as pd data = pd.read_excel('./data/test.xls') # 時間類型數據轉換 data['發生時間'] = pd.to_datetime(data['發生時間'],format='%Y%m%d%H%M%S') # 提取day data.loc[1,'發生時間'].day # 提取日期信息新建一列 data['日期'] = [i.day for i in data['發生時間']] year_data = [i.is_leap_year for i in data['發生時間']]
# 分組 group1 = data.groupby('性別') group2 = data.groupby(['入職時間','性別']) # 查看有多少組 group1.size()
用groupby方法分組後的結果並不能直接查看,而是被存在內存中,輸出的是內存地址。實際上分組後的數據對 象GroupBy相似Series與DataFrame,是pandas提供的一種對象。
Grouped.agg(函數或包含了字段名和函數的字典)
# 第一種狀況 group[['年齡','工資']].agg(min) # 對不一樣的列進行不一樣的聚合操做 group.agg({'年齡':max,'工資':sum}) # 上述過程當中使用的函數均爲系統math庫所帶的函數,若須要使用pandas的函數則須要作以下操做 group.agg({'年齡':lambda x:x.max(),'工資':lambda x:x.sum()})
Grouped.apply(函數操做)
只能對全部列執行同一種操做
group.apply(lambda x:x.max())
grouped.transform(函數操做)
transform操做時的對象再也不是每一組,而是每個元素
# 每一空添加字符 group['年齡'].transform(lambda x: x.astype(str)+'歲').head() # 組內標準化 group1['工資'].transform(lambda x:(x.mean()-x.min())/(x.max()-x.min())).head()