Pandas常用操作 - 新增數據列

初始化測試數據

df = pd.DataFrame({'stu_name': ['Nancy', 'Tony', 'Tim', 'Jack', 'Lucy'], 'stu_age': [17, 16, 16, 21, 19]})
  stu_name  stu_age
0    Nancy       17
1     Tony       16
2      Tim       16
3     Jack       21
4     Lucy       19

1. 直接增加一列

df['new_column'] = '-'
  stu_name  stu_age new_column
0    Nancy       17          -
1     Tony       16          -
2      Tim       16          -
3     Jack       21          -
4     Lucy       19          -

2. apply方法

def cal_label(age):
    if age > 18:
        return '成年'
    else:
        return '未成年'

df['label'] = df['stu_age'].apply(cal_label)
  stu_name  stu_age label
0    Nancy       17   未成年
1     Tony       16   未成年
2      Tim       16   未成年
3     Jack       21    成年
4     Lucy       19    成年

apply 方法中也可以運用 lambda 表達式,使之更加簡潔

df['label'] = df['stu_age'].apply(lambda age: '成年' if age > 18 else '未成年')
  stu_name  stu_age label
0    Nancy       17   未成年
1     Tony       16   未成年
2      Tim       16   未成年
3     Jack       21    成年
4     Lucy       19    成年

3. loc方法

df.loc[:, 'label'] = df['stu_age'].apply(lambda age: '成年' if age > 18 else '未成年')
  stu_name  stu_age label
0    Nancy       17   未成年
1     Tony       16   未成年
2      Tim       16   未成年
3     Jack       21    成年
4     Lucy       19    成年

4. assign方法

new_df = df.assign(label=df['stu_age'].apply(lambda x: '成年' if x > 18 else '未成年'))
  stu_name  stu_age label
0    Nancy       17   未成年
1     Tony       16   未成年
2      Tim       16   未成年
3     Jack       21    成年
4     Lucy       19    成年

assign 方法中,傳遞的是 **kwargs,值爲回調函數或者 Series,即 df.assign(k1=[xxx], k2=[xxx]) 的形式。
所以在上例中,計算 label 不能直接寫成:
不能直接寫成
new_df = df.assign(label=lambda x: '成年' if x['stu_age'] > 18 else '未成年')
此時會拋異常:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

而是需要寫成:
new_df = df.assign(label=df['stu_age'].apply(lambda x: '成年' if x > 18 else '未成年'))
因爲df['stu_age'].apply(lambda x: '成年' if x > 18 else '未成年')返回的是Series



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章