1. 程式人生 > >Pandas匯入資料後的,關於特徵合併的細節

Pandas匯入資料後的,關於特徵合併的細節

import pandas as pd

datapath = 'data/'

train_df = pd.read_csv(datapath+'yancheng_train_20171226.csv')

test_df = pd.read_csv(datapath+'yancheng_testA_20171225.csv')

train_sum10=train_df[(train_df.sale_date==201710)].groupby(['class_id']).sale_quantity.sum().round()

predicted=train_sum10.reset_index()

#資料合併

result=pd.merge(test_df[['predict_date','class_id']],predicted,how='left',on=['class_id'])

result.fillna(0)

result.columns=['predict_date','class_id','predict_quantity']

result.to_csv('result_201710.csv',index=False,header=True)  

開學以後,開始著手深挖資料處理的程式碼細節。

#pandas contact 之後,一定要記得用reset_index去處理index,不然容易出現莫名的邏輯錯誤

#result = pd.concat(frames) 這句話改成 result = pd.concat(frames,ignore_index=True),就可以解決了。

merge

用於通過一個或多個鍵將兩個資料集的行連線起來,類似於 SQL 中的 JOIN。該函式的典型應用場景是,針對同一個主鍵存在兩張包含不同欄位的表,現在我們想把他們整合到一張表裡。在此典型情況下,結果集的行數並沒有增加,列數則為兩個元資料的列數和減去連線鍵的數量。
on=None 用於顯示指定列名(鍵名),如果該列在兩個物件上的列名不同,則可以通過 left_on=None, right_on=None 來分別指定。或者想直接使用行索引作為連線鍵的話,就將 left_index=False, right_index=False 設為 True。
how='inner' 引數指的是當左右兩個物件中存在不重合的鍵時,取結果的方式:inner 代表交集;outer 代表並集;left 和 right 分別為取一邊。
suffixes=('_x','_y') 指的是當左右物件中存在除連線鍵外的同名列時,結果集中的區分方式,可以各加一個小尾巴。
對於多對多連線,結果採用的是行的笛卡爾積。引數說明:
left與right:兩個不同的DataFrame
how:指的是合併(連線)的方式有inner(內連線),left(左外連線),right(右外連線),outer(全外連線);預設為inner
on : 指的是用於連線的列索引名稱。必須存在右右兩個DataFrame物件中,如果沒有指定且其他引數也未指定則以兩個DataFrame的列名交集做為連線鍵
left_on:左則DataFrame中用作連線鍵的列名;這個引數中左右列名不相同,但代表的含義相同時非常有用。
right_on:右則DataFrame中用作 連線鍵的列名
left_index:使用左則DataFrame中的行索引做為連線鍵
right_index:使用右則DataFrame中的行索引做為連線鍵
sort:預設為True,將合併的資料進行排序。在大多數情況下設定為False可以提高效能
suffixes:字串值組成的元組,用於指定當左右DataFrame存在相同列名時在列名後面附加的字尾名稱,預設為('_x','_y')
copy:預設為True,總是將資料複製到資料結構中;大多數情況下設定為False可以提高效能
indicator:在 0.17.0中還增加了一個顯示合併資料中來源情況;如只來自己於左邊(left_only)、兩者(both)

原作者:lianghc