修改pandas中的数据帧

2024-06-11 15:51:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用pandas来挖掘数据。我有一个数据帧-data

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

我想将Sex替换为数字,而male使用1,而不是{}-0

我试着做循环:

^{pr2}$

但我得到了SettingWithCopyWarning。 我怎样才能使它正确呢?在


Tags: 数据namepandasagedata数字malefemale
3条回答

您可以传递dict并调用^{}

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

或者打两个电话给蒙面测向仪:

^{pr2}$

一般来说,当有向量化的解决方案可用时,您应该避免在df上循环,另外,对您正在迭代的容器进行变异不是一个好主意,因为它可能会产生一些奇怪的行为,比如它有时会起作用,或者它不起作用。在

为了添加到他们的方法中,如果你不想自己显式地定义字典,你可以更好地自动化这个过程,如果你有多个唯一的值(比如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.

同样,这更多的是为了自动化数组中大的唯一值的过程。在

原始数据帧

^{pr2}$

最终结果

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

您可以使用replace方法,它可以做到:

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

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

或者

^{pr2}$

相当于:

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

在这种情况下,列表的长度必须相同。在

相关问题 更多 >