【轉】Pandas學習筆記(三)修改&添加值


Pandas學習筆記系列:

原文:https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/3-3-pd-assign/ 本文有刪改

創建數據

我們可以根據自己的需求, 用 pandas 進行更改數據里面的值, 或者加上一些空的,或者有數值的列.

首先建立了一個 6X4 的矩陣數據。

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

"""
             A   B   C   D
2013-01-01   0   1   2   3
2013-01-02   4   5   6   7
2013-01-03   8   9  10  11
2013-01-04  12  13  14  15
2013-01-05  16  17  18  19
2013-01-06  20  21  22  23
"""

根據位置設置 loc 和 iloc

我們可以利用索引或者標簽確定需要修改值的位置。

df.iloc[2,2] = 1111
df.loc['20130101','B'] = 2222

"""
             A     B     C   D
2013-01-01   0  2222     2   3
2013-01-02   4     5     6   7
2013-01-03   8     9  1111  11
2013-01-04  12    13    14  15
2013-01-05  16    17    18  19
2013-01-06  20    21    22  23
"""

根據條件設置

如果現在的判斷條件是這樣, 我們想要更改B中的數, 而更改的位置是取決於 A 的. 對於A大於4的位置. 更改B在相應位置上的數為0.

df.B[df.A>4] = 0
"""
                A     B     C   D
2013-01-01   0  2222     2   3
2013-01-02   4     5     6   7
2013-01-03   8     0  1111  11
2013-01-04  12     0    14  15
2013-01-05  16     0    18  19
2013-01-06  20     0    22  23 
"""

按行或列設置

如果對整列做批處理, 加上一列 ‘F’, 並將 F 列全改為 NaN, 如下:

df['F'] = np.nan
"""
             A     B     C   D   F
2013-01-01   0  2222     2   3 NaN
2013-01-02   4     5     6   7 NaN
2013-01-03   8     0  1111  11 NaN
2013-01-04  12     0    14  15 NaN
2013-01-05  16     0    18  19 NaN
2013-01-06  20     0    22  23 NaN
"""

添加數據

用上面的方法也可以加上 Series 序列(但是長度必須對齊)。

df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130101',periods=6)) 
"""
             A     B     C   D   F  E
2013-01-01   0  2222     2   3 NaN  1
2013-01-02   4     5     6   7 NaN  2
2013-01-03   8     0  1111  11 NaN  3
2013-01-04  12     0    14  15 NaN  4
2013-01-05  16     0    18  19 NaN  5
2013-01-06  20     0    22  23 NaN  6
"""

注意添加新的一列數據時一定要記得指明index,因為你不指明index的話,即使新的列元素數量和原來DataFrame一樣,那么最終還是會以NaN的格式初始化,看下面例子:

df['E'] = pd.Series([1,2,3,4,5,6],)
print(df)

"""
             A   B   C   D   E
2013-01-01   0   1   2   3 NaN
2013-01-02   4   5   6   7 NaN
2013-01-03   8   9  10  11 NaN
2013-01-04  12  13  14  15 NaN
2013-01-05  16  17  18  19 NaN
2013-01-06  20  21  22  23 NaN
"""

當然如果我們指定的index和原來的不一樣也沒關系,因為pandas會自動把沒有對應的部分填充為NaN,例子如下:

df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130103',periods=6))
print(df)

"""
             A   B   C   D    E
2013-01-01   0   1   2   3  NaN
2013-01-02   4   5   6   7  NaN
2013-01-03   8   9  10  11  1.0
2013-01-04  12  13  14  15  2.0
2013-01-05  16  17  18  19  3.0
2013-01-06  20  21  22  23  4.0
"""



微信公眾號:AutoML機器學習
MARSGGBO原創
如有意合作或學術討論歡迎私戳聯系~
郵箱:marsggbo@foxmail.com



2019-10-30 11:50:49




免責聲明!

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



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