Pandas學習筆記系列:
- Pandas學習筆記(一)基本介紹
- Pandas學習筆記(二)選擇數據
- Pandas學習筆記(三)修改&添加值
- Pandas學習筆記(四)處理丟失值
- Pandas學習筆記(五)合並 concat
- Pandas學習筆記(六)合並 merge
- Pandas學習筆記(七)plot畫圖
原文: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
"""