DataFrame添加列的多個方面詳解

一、添加單列

1、使用賦值語句添加新列

在pandas中,可以使用賦值語句為DataFrame添加新列。例如,創建一個包含「name」和「age」兩列的DataFrame:


import pandas as pd
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})

現在,我們想要添加一個新列「gender」。可以直接用賦值語句為df添加新列:


df['gender'] = ['F', 'M', 'M']
print(df)

輸出結果為:

      name  age gender
0    Alice   25      F
1      Bob   30      M
2  Charlie   35      M

2、使用insert()方法添加新列

另外一種添加新列的方式是使用pandas.DataFrame.insert()方法。該方法允許在DataFrame的指定位置插入一個新的列。例如,在上面的例子中,我們可以在「age」列後面插入一個新的名為「gender」的列:


df.insert(2, 'gender', ['F', 'M', 'M'])
print(df)

輸出結果與前面的示例代碼相同。

二、添加多列

1、使用賦值語句添加多列

對於需要添加多列的情況,使用賦值語句也很方便。例如,現在我們希望在之前的DataFrame上同時添加「height」和「weight」兩列。


df['height'] = [165, 175, 180]
df['weight'] = [50, 70, 85]
print(df)

輸出結果如下:

      name  age gender  height  weight
0    Alice   25      F     165      50
1      Bob   30      M     175      70
2  Charlie   35      M     180      85

2、使用concat()方法添加多列

pandas提供了一個名為「concat」的函數,可以沿著指定的軸連接多個DataFrame或Series對象。


df_height = pd.DataFrame([165, 175, 180], columns=['height'])
df_weight = pd.DataFrame([50, 70, 85], columns=['weight'])

df = pd.concat([df, df_height, df_weight], axis=1)
print(df)

注意,在使用concat()方法連接時,需要指定axis=1,表示沿著列的方向連接。如果指定axis=0,則表示沿著行方向連接。

三、利用apply()方法添加新列

1、使用apply()方法根據行數據生成新列

apply()方法可以接受一個函數作為參數,該函數將由DataFrame或者Series的每一行數據調用,返回一個值,這個值就會作為新的一列添加到DataFrame或Series中。以下是一個示例:


def calculate_bmi(row):
    height = row['height'] / 100
    weight = row['weight']
    bmi = weight / (height ** 2)
    return round(bmi, 1)

df['bmi'] = df.apply(calculate_bmi, axis=1)
print(df)

輸出結果如下:

      name  age gender  height  weight   bmi
0    Alice   25      F     165      50  18.4
1      Bob   30      M     175      70  22.9
2  Charlie   35      M     180      85  26.2

上述代碼中,我們定義了一個函數calculate_bmi(),接受DataFrame的每一行作為參數,然後根據「height」和「weight」列計算bmi指數。

2、使用apply()方法根據列數據生成新列

另外一種使用apply()方法添加新列的方式是根據某一列的數據生成新列。例如,現在我們想要在DataFrame上添加一個新的列,表示每個人的性別是否為「Male」,可以按照以下方式實現:


def gender_to_number(gender):
    return 1 if gender == 'M' else 0

df['is_male'] = df['gender'].apply(gender_to_number)
print(df)

輸出結果如下:

      name  age gender  height  weight   bmi  is_male
0    Alice   25      F     165      50  18.4        0
1      Bob   30      M     175      70  22.9        1
2  Charlie   35      M     180      85  26.2        1

上述代碼中,我們定義了一個函數gender_to_number(),接受「gender」列中的每個值作為參數,如果為「M」則返回1,否則返回0。然後使用apply()方法將該函數應用於「gender」列,生成新的「is_male」列。

四、結合其他函數批量修改列名

在處理一些大型的數據集時,可能需要對列名稱進行批量修改。pandas提供了一些方法可以方便地修改列名。

1、使用rename()方法修改列名

rename()方法可以接受一個字典對象,可以將DataFrame的某些列名稱修改為指定名稱。


df = df.rename(columns={'name': 'Name', 'age': 'Age'})
print(df)

上述代碼將「name」列的名稱修改為「Name」,將「age」列的名稱修改為「Age」。

2、使用map()方法修改列名

map()方法可以接受一個函數作為參數,該函數將對DataFrame的每個列名稱進行調用,返回新的列名稱。


def add_prefix(col_name):
    return 'PERSON_' + col_name.upper()

df = df.rename(columns=add_prefix)
print(df)

上述代碼中,我們定義了一個函數add_prefix(),該函數將DataFrame的每個列名稱前面添加「PERSON_」前綴。然後使用rename()方法調用該函數,生成新的列名稱。

五、使用assign()方法添加新列

assign()方法可以添加新列到DataFrame中,同時可以進行鏈式操作。

1、添加單列


df = df.assign(bmi_class=df['bmi'].apply(lambda x: 'Underweight' if x < 18.5 else 'Normal' if x < 25 else 'Overweight'))
print(df)

上述代碼中,我們使用assign()方法添加了一個名為「bmi_class」的新列,值為根據「bmi」列計算得出的標準分類結果。

2、添加多列


df = df.assign(
    bmi_class=df['bmi'].apply(lambda x: 'Underweight' if x < 18.5 else 'Normal' if x < 25 else 'Overweight'),
    name_len=df['Name'].apply(lambda x: len(x))
)
print(df)

上述代碼中,我們使用assign()方法同時添加了兩個新列。

六、結語

在本文中,我們詳細闡述了在pandas中如何添加新列到DataFrame中。針對不同場景,我們介紹了多種添加新列的方法,包括使用賦值語句、使用concat()方法、使用apply()方法和使用assign()方法等。此外,我們還介紹了如何結合其他函數批量修改列名。掌握了這些知識點,讀者可以更加靈活地應對數據處理中的各種情況。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/287007.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 13:07
下一篇 2024-12-23 13:07

相關推薦

發表回復

登錄後才能評論