關於pandas增加行時,索引名稱的一些問題


學習pandas兩天了,關於這個增加行的問題一直困擾着我,測試了幾個代碼,終於搞通了一點(昨天是因為代碼敲錯了。。。)

直接上代碼:

1 dates = pd.date_range('20170101',periods=6) 
2 df1 = pd.DataFrame(np.arange(24).reshape((6,4)),index = dates,columns=['A','B','C','D'])

創建了一個名為df1的DataFrame,其中數據為24為排列數,關鍵是index的取值,我這里用的pandas自帶的日期序列函數生成的dates

生成的df1如圖:

 

 這里可以看到index的名稱為date_time格式的

需要加入新的一行時,我采用了loc函數:

df1.loc[pd.to_datetime('20170108'),['A','B','C','D','E']] = [1,2,3,4,5]

按照之前的index的格式添加,顯然增加的新行和之前行的形式是相同的:

 

 (這里圖片多添加了一行,不牽扯)

但是如果,添加的index和之前的數據類型不同時,會報錯么?

試一試:

df1.loc['20180108',['D','E']]=[1,2]

這里我將一個字符串’20180108‘,添加到新行的index,本以為會報錯,結果:

 

 添加成功了,不過表格的格式也發生更改了,date_time原本隱藏的時間00:00:00顯示出來。接着我添加相同名稱的int32位變量試試:

df1.loc[20180108,['E','C']] = [1,3]

同樣添加成功,神奇的一幕發生了:

 

 出現了兩個完全相同的index:20180108

這是為什么呢?原來是因為,上面那行的20180108的數據類型是str,而下面那行的20180108數據類型是int32,系統判斷是兩個完全不同的數據,所以會出現兩個完全相同的index在表格中

接着,再添加一個date_time格式的’20180108‘吧:

df1.loc[pd.to_datetime('20180108'),['A','B']] = [3,4]

結果不出所料:

 

 成功添加。

至此,pandas的添加行操作原理基本搞明白了,keep learning。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM