1. 程式人生 > 實用技巧 >5.pandas新增資料列

5.pandas新增資料列

有的時候,表格自帶的資料根本沒有辦法滿足我們,我們經常會新加一列資料或者對原有的資料進行修改

還是接著上篇文章的資料進行操作

直接賦值

我想算一下每一天的溫差

df.loc[:, 'wencha'] = df['wendu_max'] - df['wendu_min']
            wendu_min  wendu_max weather  fengji  wencha
data                                                    
2020-01-01          1         15       晴       1      14
2020-01-02          1         16      多雲       2      15
2020-01-03          1         17      小雨       4      16
2020-01-04          4         18       陰       2      14
2020-01-05          1         19      大雨       1      18
2020-01-06          3         20      小雨       3      17
2020-01-07          1         21       晴       5      20
2020-01-08          1         22      多雲       2      21
2020-01-09          1         23       陰       1      22
2020-01-10          0         24      小雨       3      24
2020-01-11          2         25      多雲       4      23

這樣就多了一列溫差的資料

apply條件新增

我現在想加一個溫度型別列,低於20度的是低溫,20-24的是中溫,25以上的是高溫

def temperatureType(df):
    if df['wendu_max'] < 20:
        return '低溫'
    elif 24 >= df['wendu_max'] >= 20:
        return '中溫'
    else:
        return '高溫'


df.loc[:, 'wendu_t'] = df.apply(temperatureType, axis=1)
            wendu_min  wendu_max weather  fengji  wencha wendu_t
data                                                            
2020-01-01          1         15       晴       1      14      低溫
2020-01-02          1         16      多雲       2      15      低溫
2020-01-03          1         17      小雨       4      16      低溫
2020-01-04          4         18       陰       2      14      低溫
2020-01-05          1         19      大雨       1      18      低溫
2020-01-06          3         20      小雨       3      17      中溫
2020-01-07          1         21       晴       5      20      中溫
2020-01-08          1         22      多雲       2      21      中溫
2020-01-09          1         23       陰       1      22      中溫
2020-01-10          0         24      小雨       3      24      中溫
2020-01-11          2         25      多雲       4      23      高溫

這裡有幾個點需要注意:

  • apply裡面是函式名而不是函式名()
  • axis=1是列的匹配,比如是通過最高溫度進行篩選,最高溫度是其中一列
  • axis=0是索引匹配,如果是想通過日期來新加一列,就應該是axis=0

assign多列新增

我想將攝氏度轉換成華氏度

df = df.assign(
    min_huas=lambda x: x['wendu_min'] * 9 / 5 + 32,
    max_huas=lambda x: x['wendu_max'] * 9 / 5 + 32,
)
            wendu_min  wendu_max weather  fengji  min_huas  max_huas
data                                                                
2020-01-01          1         15       晴       1      33.8      59.0
2020-01-02          1         16      多雲       2      33.8      60.8
2020-01-03          1         17      小雨       4      33.8      62.6
2020-01-04          4         18       陰       2      39.2      64.4
2020-01-05          1         19      大雨       1      33.8      66.2
2020-01-06          3         20      小雨       3      37.4      68.0
2020-01-07          1         21       晴       5      33.8      69.8
2020-01-08          1         22      多雲       2      33.8      71.6
2020-01-09          1         23       陰       1      33.8      73.4
2020-01-10          0         24      小雨       3      32.0      75.2
2020-01-11          2         25      多雲       4      35.6      77.0

分組新增

如果高低溫差大於15度,我就認為溫差大,否則就是溫差小

df.loc[df['wendu_max'] - df['wendu_min'] > 15, 'wencha'] = '溫差大'
df.loc[df['wendu_max'] - df['wendu_min'] <= 15, 'wencha'] = '溫差小'
            wendu_min  wendu_max weather  fengji wencha
data                                                   
2020-01-01          1         15       晴       1    溫差小
2020-01-02          1         16      多雲       2    溫差小
2020-01-03          1         17      小雨       4    溫差大
2020-01-04          4         18       陰       2    溫差小
2020-01-05          1         19      大雨       1    溫差大
2020-01-06          3         20      小雨       3    溫差大
2020-01-07          1         21       晴       5    溫差大
2020-01-08          1         22      多雲       2    溫差大
2020-01-09          1         23       陰       1    溫差大
2020-01-10          0         24      小雨       3    溫差大
2020-01-11          2         25      多雲       4    溫差大