【问题标题】:How to change values in a dataframe Python如何更改数据框 Python 中的值
【发布时间】:2017-12-17 15:52:57
【问题描述】:

我已经搜索了过去 30 分钟的答案,但唯一的解决方案是针对单个列或在 R 中。我有一个数据集,我想将 ('Y/N') 值更改为分别为 1 和 0。我觉得复制粘贴17次以下的代码效率很低。

df.loc[df.infants == 'n', 'infants'] = 0
df.loc[df.infants == 'y', 'infants'] = 1
df.loc[df.infants == '?', 'infants'] = 1

我的解决方案如下。这不会导致错误,但数据框中的值不会改变。我假设我需要做类似 df = df_new 的事情。但是如何做到这一点?

for coln in df:
for value in coln: 
        if value == 'y':
            value = '1'
        elif value == 'n':
            value = '0'
        else: 
            value = '1'

编辑:此数据集中有 17 列,但我希望处理另一个包含 56 列的数据集。

republican  n   y   n.1 y.1 y.2 y.3 n.2 n.3 n.4 y.4 ?   y.5 y.6 y.7 n.5 y.8
0   republican  n   y   n   y   y   y   n   n   n   n   n   y   y   y   n   ?
1   democrat    ?   y   y   ?   y   y   n   n   n   n   y   n   y   y   n   n
2   democrat    n   y   y   n   ?   y   n   n   n   n   y   n   y   n   n   y
3   democrat    y   y   y   n   y   y   n   n   n   n   y   ?   y   y   y   y
4   democrat    n   y   y   n   y   y   n   n   n   n   n   n   y   y   y   y

【问题讨论】:

  • 您要更改多少列?你能显示 df.head() 吗?
  • 这个数据集中有 17 列,但还有一个有 56 列。

标签: python pandas dataframe replace


【解决方案1】:

您可以使用map function 更改这些值。

例如:

x = {'y': 1, 'n': 0}

for col in df.columns():
    df[col] = df[col].map(x)

这样您可以映射数据框的每一列。

【讨论】:

  • 我必须为每一列都这样做吗?我现在使用的数据集只有 17 列,但我可以看到这对于我的最终项目(有 56 列)来说很麻烦。
  • 谢谢!它没有用,但我认为这是因为我的数据集在提出您的建议之前发生了变化。我现在已经启动并运行了!
【解决方案2】:

这应该可行:

for col in df.columns():
   df.loc[df[col] == 'n', col] = 0
   df.loc[df[col] == 'y', col] = 1
   df.loc[df[col] == '?', col] = 1

【讨论】:

    【解决方案3】:

    也许你可以尝试申请,

    import pandas as pd
    # create dataframe
    number = [1,2,3,4,5]
    sex = ['male','female','female','female','male']
    df_new = pd.DataFrame()
    df_new['number'] = number
    df_new['sex'] = sex
    df_new.head()
    # create def for category to number 0/1
    def tran_cat_to_num(df):
        if df['sex'] == 'male':
            return 1
        elif df['sex'] == 'female':
            return 0
    # create sex_new 
    df_new['sex_new']=df_new.apply(tran_cat_to_num,axis=1)
    df_new
    

    原始

       number     sex
    0       1    male
    1       2  female
    2       3  female
    3       4  female
    4       5    male
    

    使用后申请

       number     sex  sex_new
    0       1    male        1
    1       2  female        0
    2       3  female        0
    3       4  female        0
    4       5    male        1
    

    【讨论】:

      【解决方案4】:

      应该这样做:

      df.infants = df.infants.map({ 'Y' : 1, 'N' : 0})

      【讨论】:

        【解决方案5】:

        我认为最简单的方法是使用replace by dict

        np.random.seed(100)
        df = pd.DataFrame(np.random.choice(['n','y','?'], size=(5,5)), 
                                           columns=list('ABCDE'))
        print (df)
           A  B  C  D  E
        0  n  n  n  ?  ?
        1  n  ?  y  ?  ?
        2  ?  ?  y  n  n
        3  n  n  ?  n  y
        4  y  ?  ?  n  n
        
        d = {'n':0,'y':1,'?':1}
        df = df.replace(d)
        print (df)
           A  B  C  D  E
        0  0  0  0  1  1
        1  0  1  1  1  1
        2  1  1  1  0  0
        3  0  0  1  0  1
        4  1  1  1  0  0
        

        【讨论】:

          【解决方案6】:

          以上所有解决方案都是正确的,但您还可以做的是:

          df["infants"] = df["infants"].replace("Y", 1).replace("N", 0).replace("?", 1) 现在我更仔细地阅读它与使用 replace with dict 非常相似!

          【讨论】:

            【解决方案7】:

            使用dataframe.replace()

            df.replace({'infants':{'y':1,'?':1,'n':0}},inplace=True)
            

            【讨论】:

              猜你喜欢
              • 2019-03-08
              • 1970-01-01
              • 2023-02-20
              • 1970-01-01
              • 2021-05-27
              • 1970-01-01
              • 2018-02-20
              • 2020-02-22
              • 2020-10-18
              相关资源
              最近更新 更多