代码之家  ›  专栏  ›  技术社区  ›  surge3333

python在原始值未知时替换值

  •  0
  • surge3333  · 技术社区  · 4 年前

    当一列中的值不是空/NaN时,我希望替换该列中的所有值。当我不知道我要替换的东西的价值时,我似乎不知道如何替换。

    我有这个

    df1 = pd.DataFrame({'A': ['1', '2', 'Q', '4'],
                        'B': ['5', '6', '7', '8']})
    
    df2 = pd.DataFrame({'C': ['1', 'Q']})
    
    df3 = pd.merge(df1, df2,
                   left_on=["A"],
                   right_on=["C"],
                   how='left')
    print(df1)
    print(df2)
    print(df3)
    
       A  B
    0  1  5
    1  2  6
    2  Q  7
    3  4  8
    
       C
    0  1
    1  Q
    
       A  B    C
    0  1  5    1
    1  2  6  NaN
    2  Q  7    Q
    3  4  8  NaN
    

    如果我知道“替换”这个值起作用,但我不会提前知道这些值是什么。

    df3['C'] = df3['C'].replace(['1'],'Y')
    

       A  B    C
    0  1  5    Y
    1  2  6  NaN
    2  Q  7    Y
    3  4  8  NaN
    

    2 回复  |  直到 4 年前
        1
  •  3
  •   anky    4 年前

    加上这条线,就行了

    df3.loc[df3['C'].notna(), 'C'] = 'Y'
    
        2
  •  1
  •   Vinson Ciawandy    4 年前
    df3["C"].where(df3["C"].isna(),"Y",inplace=True)
    

    阅读更多: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.where.html

        3
  •  0
  •   Hermelin    4 年前

    首先获取所有具有nan值的行。

    # locate all non nan values in col C
    nan = df3['C'].isna()
    

    然后反转此定位器并在C列中赋值

    # invert to get the non nan rows
    df3.loc[~nan, 'C'] = 'Y'
    

       A  B    C
    0  1  5    Y
    1  2  6  NaN
    2  Q  7    Y
    3  4  8  NaN