Python小點dian兒: Python-Pandas-DataFrame 如何把df變爲以數據中的某一列爲index

   

目錄

 我們在讀入數據的時候,數據本來有它自身的user_id,這行數據又是不進入模型訓練的。我們怎麼處理呢?  

法一:文件讀入階段

小點dian兒:,讀入文件的幾行,參數:nrows=行數

法二:在DateFrame階段設置:

小點dian兒::讀入文件的指定列,參數:usecols=["列名1',"列名2",.....],及前幾行,

參數:nrows=行數。

小點dian兒:存入數據的時候,我們希望保留了數據在系統的行名或者不保存,

參數:index=None:


我們在讀入數據的時候,數據本來有它自身的user_id,這行數據又是不進入模型訓練的。我們怎麼處理呢?

是不是在訓練模型的時候,把train數據集刪去user_id,同時,在test數據集上也先刪去user_id,得到預測結果後再加上呢?

顯然上面不是一種好的方法,雖然我們我們需要顧及這個數據的id不是自變量,不能加入訓練,又要顧及讀入數據會默認有一個index(行id),0,1,2,3……我們可以不使用默認的index,認爲指定行名,就像指定數據庫的鍵值(要求唯一)。怎麼辦呢,

法一:文件讀入階段

在讀入階段的時候指定,其中一列爲index,命令如下,index_col='列名',這個列是你所指定爲行id所在列的名字。

df = pd.read_csv(filepath, sep=',',index_col='user_id')

我們打印輸入一下:

 df = pd.read_csv("C:/Users/train.csv", sep=',',index_col='user_id',nrows=5)


小點dian兒:,讀入文件的幾行,參數:nrows=行數

                  service_type  is_mix_service  online_time
user_id
Gx4sJzcQog01UhZL             4               0           85
kEXrhTiug93DIcLG             1               0           10
AouXr0EOUtSRdiYK             1               0           12
Yds7U30hnRZDiLtb             4               0          134
OFDTSXrhN9Q2mbVw             4               0           84

法二:在DateFrame階段設置:

首先讀入文件生成一個df:

>>> df = pd.read_csv("C:/Users/train.csv", sep=',',usecols=['service_type','online_tim
e','user_id'],nrows=5)
>>> df
   service_type  online_time           user_id
0             4           85  Gx4sJzcQog01UhZL
1             1           10  kEXrhTiug93DIcLG
2             1           12  AouXr0EOUtSRdiYK
3             4          134  Yds7U30hnRZDiLtb
4             4           84  OFDTSXrhN9Q2mbVw

小點dian兒::讀入文件的指定列,參數:usecols=["列名1',"列名2",.....],及前幾行,

參數:nrows=行數。

命令:dfname.set_index("列名"), 指定行的名稱對應的列名。但是這個命令是不對原有的DateFrame改變:

>>> df.set_index('user_id')

                  service_type  online_time
user_id
Gx4sJzcQog01UhZL             4           85
kEXrhTiug93DIcLG             1           10
AouXr0EOUtSRdiYK             1           12
Yds7U30hnRZDiLtb             4          134
OFDTSXrhN9Q2mbVw             4           84
#df.set_index('user_id')是新生成的dateframe

>>> df
   service_type  online_time           user_id
0             4           85  Gx4sJzcQog01UhZL
1             1           10  kEXrhTiug93DIcLG
2             1           12  AouXr0EOUtSRdiYK
3             4          134  Yds7U30hnRZDiLtb
4             4           84  OFDTSXrhN9Q2mbVw
#df並沒有改變

如何對原有的df改變呢:

>>> df.set_index(["user_id"], inplace=True)
>>> df
                  service_type  online_time
user_id
Gx4sJzcQog01UhZL             4           85
kEXrhTiug93DIcLG             1           10
AouXr0EOUtSRdiYK             1           12
Yds7U30hnRZDiLtb             4          134
OFDTSXrhN9Q2mbVw             4           84

完工。

小點dian兒:存入數據的時候,我們希望保留了數據在系統的行名或者不保存,

參數:index=None

在我們不進行如上的設計的時候,系統或分配默認的行index:0,1,2..在我們將運行結果存入文件,如果不加以設置,將會把這一index列,存入數據文件。(我們已經做好如上涉及,我們希望user_id,和結果同時被記錄,則不需要如下index是否存儲的設置)

>>> df = pd.read_csv("C:/Users/train.csv", sep=',')
>>> df
   service_type  online_time           user_id
0             4           85  Gx4sJzcQog01UhZL
1             1           10  kEXrhTiug93DIcLG
2             1           12  AouXr0EOUtSRdiYK
3             4          134  Yds7U30hnRZDiLtb
4             4           84  OFDTSXrhN9Q2mbVw

那這一行又是沒有實際用處甚至在我們的csv或者excel這種本來就有表格索引的文件中是冗餘的,那怎麼辦呢?

參數:index=None

    df.to_csv(save_path, index=None)

# 保存計算結果,不保留原有df中的行名
def save_result(save_path, y_test_predict):
    y_test_predict.to_csv(save_path, index=None)
    return None
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章