[英]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.