一、添加單列
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-hant/n/287007.html