簡體   English   中英

修改pandas中的DataFrame

[英]modifying DataFrame in pandas

我用pandas挖掘數據。 我有一個DataFrame - data

   Age  Sex     Name 
0  28   male    Kirill
1  32   female  Alina
2  12   female  Sasha

我想將Sex替換為數字,而不是male使用1 ,而不是female - 0

我嘗試循環:

for i in range(data.Age.size()):
    if data.Sex[i]=='male'
        data.Sex[i]=1
    else:
        data.Sex[i]=0

但是我得到了一個SettingWithCopyWarning 我怎么能做對的?

你可以傳遞一個字典並調用map

In [21]:
sex = {'male':1, 'female':0}
df['Sex'] = df['Sex'].map(sex)
df

Out[21]:
   Age  Sex    Name
0   28    1  Kirill
1   32    0   Alina
2   12    0   Sasha

或者對蒙面df進行2次調用:

In [25]:
df.loc[df['Sex']=='male','Sex'] = 1
df.loc[df['Sex']=='female','Sex'] = 0
df

Out[25]:
   Age Sex    Name
0   28   1  Kirill
1   32   0   Alina
2   12   0   Sasha

一般情況下,當有可用的矢量化解決方案時,你應該避免在df上循環,另外,改變你正在迭代的容器並不是一個好主意,因為它會產生奇怪的行為,例如它有時可行或不可行。

你可以使用replace方法,它正是這樣做的:

data.replace({'male': 1,
              'female': 0})

   Age  Sex    Name
0   28    1  Kirill
1   32    0   Alina
2   12    0   Sasha

要么

data.replace(["male", "female"], [0, 1])

相當於:

data.replace(to_replace=["male", "female"], values=[0, 1])

在這種情況下,列表必須具有相同的長度。

要添加到他們的方法中,如果您不想自己顯式定義字典,則可以更好地自動化該過程,如果您有多個唯一值(即5+),這將非常有用。

import numpy as np
import pandas as pd

sex = np.sort(df['Sex'].unique()) # extract unique values and sorts them alphabetically
sex_dict = dict(enumerate(sex )) # creates a dictionary from the array above
sex_dict= dict(zip(sex_dict.values(), sex_dict.keys())) # Corrects the dictionary

df['Sex'] = df['Sex'].map(sex_dict) # maps as described in the other answers.

同樣,這更適用於自動化陣列中大型唯一值的過程。

Orignal DataFrame

   Age     Sex    Name
0   28    male  Kirill
1   32  female   Alina
2   12  female   Sasha

最終結果

   Age  Sex    Name
0   28    1  Kirill
1   32    0   Alina
2   12    0   Sasha

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM