Pandas常用方法總結
先開個頭,明天接著寫。
一、資料的讀取與匯出
1、資料讀取
df = pd.read_csv('/home/greg/桌面/uk_rain_2014.csv', sep=',',header=0)
讀取資料有三個引數,第一個是檔名,第二個是分隔符,也就是兩列之間的分隔符,預設是',',第三個引數也就是檔案每一列的命名,如果沒有列名可設定為header=None
從限定分隔符文字中匯入資料,read_tabel
從excel中讀入資料,read_excel
從資料庫中讀,需要安裝pymysql這個庫,
從json、html、貼上板中讀,read_json,read_html,read_clipboard
2、資料構造
第一種方法:
df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['f1', 'f2', 'f3'])
Out[4]:
f1 f2 f3
0 1 2 3
1 4 5 6
生成一個三行兩列的的矩陣,列名分別為f1 f2 f3。
第二種方法:按列生成
df = pd.DataFrame({'user_id':[1,2,3], 'item_id':[12,34,56]})
Out[6]: item_id user_id 0 12 1 1 34 2 2 56 3
以鍵值對的形式傳入,第一列為user_id,第二列為item_id。
第三種方法:按行生成
df = pd.DataFrame([{'user_id':4, 'item_id':2}, {'user_id':5, 'item_id':1
...: }])
In [8]: df
Out[8]:
item_id user_id
0 2 4
1 1 5
傳入一個列表,列表中是一個字典,字典裡面是每一行的組成,也就是列名作鍵,值作為這一列的資料。
3、資料匯出
In [9]: df.to_csv('~/桌面/test.csv', index=False, sep=',') In [10]: df.to_csv('~/桌面/test.csv', index=True, sep=',')
生成csv檔案,第一種方法生成的沒有索引,
item_id,user_id
2,4
1,5
第二種方法帶有索引
,item_id,user_id
0,2,4
1,1,5
也可以to_excel to_sql, to_json檔案。
二、資料檢視
檢視資料的前n行,df.head(n)
檢視資料的後n行,df.tail(n)
檢視資料的形狀,df.shape
檢視資料的索引,資料型別,記憶體資訊
In [17]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33 entries, 0 to 32
Data columns (total 7 columns):
Water Year 33 non-null object
Rain (mm) Oct-Sep 33 non-null int64
Outflow (m3/s) Oct-Sep 33 non-null int64
Rain (mm) Dec-Feb 33 non-null int64
Outflow (m3/s) Dec-Feb 33 non-null int64
Rain (mm) Jun-Aug 33 non-null int64
Outflow (m3/s) Jun-Aug 33 non-null int64
dtypes: int64(6), object(1)
memory usage: 1.9+ KB
檢視資料型別的彙總統計 df.describe()
檢視某一列的統計值:
df['Rain (mm) Dec-Feb'].value_counts(dropna=False)
檢視某一列不重複的值
df['Rain (mm) Dec-Feb'].unique()
三、資料選取
檢視某一列df['user_id']
檢視多列df[['user_id', 'item_id']]
檢視某行某列的的值df.iloc[0, 0]
取樣取部分資料df.sample(frac=0.5)
指定取樣的個數df.sample(n=5)
四、資料整理
空值整理:檢查DataFrame中的空值,df.isnull()
刪除所有帶空值的行df.dropna(axis=0)
刪除所有帶空值的列df.dropna(axis=1) df.dropna(sxis=1, thresh=n)
用x替換DataFrame中的所有空值df.fillna(x)
用眾值填充,df.fillna(df.median())
用中位數填充,df.fillna(df.median())
對某一列填充,df['user_id'][df.age.isnull] = '0'
更改某列資料型別df['user_age']=df['user_age'].astype('int')
用one替換1,用three替換3 s.replace([1,3],['one', 'three'])
重新命名列名df.columns = ['a', 'b', 'c']
批量更改列名,批量更改索引,選擇性更改列名 df.rename
重置索引,各種操作之後,索引可能會打亂,使用df.reset_index(drop=True),drop=True是拋棄原來的索引
五、資料處理
過濾處理 df[df['c']]>0 類似numpy
排序處理 df.sort_values(by='c', ascending=True) 按照c列升序排序
df.sort_values(['c', 'd'], ascending=[True, False]) 先按列c升序排列,再按d列降序排列
分組 df.groupby()
df.groupby('user_id', as_index=False)['is_trade'].agg({'buy':'sum', 'click':'count'})
sum count都是內建函式
先分組,然後按照is_trade這一列進行處理,購買的行為,點選的行為進行統計
按行檢視:
for index, row in df.iterrows():
print(index, row['user_id'])
for key, df in df.groupby('user_id'):
print(key, df)
對df使用某一個函式
df['user_id'].apply(np.mean)
df.apply(np.max, axis=1),對每一行使用函式np.max axis=0就是每一列
構造分組排序特徵,對shop分組,對組裡的item轉化率分別排序
df.groupby('shop_id', as_index=False)['item_cvr'].rank(ascending=False, method='dense')
六、資料合併
append、concat、merge
pd.concat([df1, df2], axis=0) axis預設為0,按行合併。axis=1為按列
七、其它的一些資料處理
df.mean()、df.corr()相關性、df.max()、df.min()、df.mean()、df['c'].hist()
Reference: