1. 程式人生 > >Pandas常用方法總結

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: