pandas中的reindex()和set_index()

今天在想替換一個DateFrame中的index時碰到這個問題,理所當然的以為應該使用reindex(),后來發(fā)現(xiàn)是我沒用對這兩個api。

reindex()

DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)

這里的labels如果是和原來的index完全不重合,那么產(chǎn)生的dataframe的所有元素將是NaN。
例子:

import pandas as pd
index = ['Firefox', 'Chrome', 'Safari', 'IE10', 'Konqueror']
df = pd.DataFrame({'http_status': [200, 200, 404, 404, 301],
                   'response_time': [0.04, 0.02, 0.07, 0.08, 1.0]},
                  index=index)
df
Out[5]: 
           http_status  response_time
Firefox            200           0.04
Chrome             200           0.02
Safari             404           0.07
IE10               404           0.08
Konqueror          301           1.00
new_index = ['Safari', 'Iceweasel', 'Comodo Dragon', 'IE10',
             'Chrome']
df.reindex(new_index)
Out[7]: 
               http_status  response_time
Safari               404.0           0.07
Iceweasel              NaN            NaN
Comodo Dragon          NaN            NaN
IE10                 404.0           0.08
Chrome               200.0           0.02
df.reindex(range(5))
Out[8]: 
   http_status  response_time
0          NaN            NaN
1          NaN            NaN
2          NaN            NaN
3          NaN            NaN
4          NaN            NaN

所以該函數(shù)并不能實現(xiàn)完全替換index,而保持住原有dataframe中的元素。如果只是想完全替換原有的index,其他該有的數(shù)據(jù)照樣按原來的順序排列,就得用set_index()

set_index()

DataFrame.set_index(*keys*, *drop=True*, *append=False*, *inplace=False*, *verify_integrity=False*)

df = pd.DataFrame({'http_status': [200, 200, 404, 404, 301],
                   'response_time': [0.04, 0.02, 0.07, 0.08, 1.0]},
                  index=index)
df
Out[14]: 
           http_status  response_time
Firefox            200           0.04
Chrome             200           0.02
Safari             404           0.07
IE10               404           0.08
Konqueror          301           1.00
df.set_index(pd.Index(range(5)))
Out[15]: 
   http_status  response_time
0          200           0.04
1          200           0.02
2          404           0.07
3          404           0.08
4          301           1.00

當然如果只是想把原先的index重新變成從0開始的數(shù)字,可以直接使用dataframe.reset_index()

df = pd.DataFrame([('bird', 389.0),
                   ('bird', 24.0),
                   ('mammal', 80.5),
                   ('mammal', np.nan)],
                  index=['falcon', 'parrot', 'lion', 'monkey'],
                  columns=('class', 'max_speed'))
df
Out[19]: 
         class  max_speed
falcon    bird      389.0
parrot    bird       24.0
lion    mammal       80.5
monkey  mammal        NaN

df.reset_index()
Out[20]: 
    index   class  max_speed
0  falcon    bird      389.0
1  parrot    bird       24.0
2    lion  mammal       80.5
3  monkey  mammal        NaN

以上方法結(jié)果顯示原來的index還包含在新的dataframe中,這時候可以使用reset_index(drop=True)來丟棄原來的index.

總結(jié)

dataframe.reindex()

  • 原來dataframe中index在新產(chǎn)生的dateframe中無對應行的,該行元素會全部被置為NaN
  • 可以指定fill_value,默認為NaN

set_index()

  • 本意是用dataframe中的某一列的值設(shè)置dataframe的index
  • 也可以用new_index去設(shè)置

reset_index()

  • 將以前index覆蓋為從0開始的數(shù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • ??說起pandas這個是python數(shù)據(jù)清洗的利器,它可以讓你像sql一樣操作數(shù)據(jù),同時可以對數(shù)據(jù)進行各種計算,...
    不分享的知識毫無意義閱讀 15,769評論 1 15
  • pandas Pandas是線上服務類型,數(shù)據(jù)分析和數(shù)據(jù)處理(在機器學習中數(shù)據(jù)處理) 數(shù)據(jù)分析三劍客: numpy...
    Galaxy_saturn閱讀 905評論 0 1
  • 寫在前面,我也是一名python學習小白,從最近開始學習Python,由于之前沒有編程基礎(chǔ),學習起來比較費勁...
    Gabrielff閱讀 515評論 0 2
  • 一. 索引對象 在之前介紹的Series和DataFrame結(jié)構(gòu)中,我們已經(jīng)接觸到了索引對象,它是pandas的重...
    躺在稻田里的小白菜閱讀 2,158評論 0 1
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,832評論 28 54

友情鏈接更多精彩內(nèi)容