【问题标题】:Python pandas DataFrame operations with NaN使用 NaN 的 Python pandas DataFrame 操作
【发布时间】:2021-01-01 20:20:12
【问题描述】:

在 pandas DataFrame 上,我正在尝试计算两个特征之间的百分比变化。例如:

df = pd.DataFrame({'A': [100, 100, 100], 'B': [105, 110, 93], 'C': ['NaN', 102, 'NaN']})

我试图计算 df['A'] - df['C'] 之间的变化,但在我们有 'NaN' 的行上,使用来自 'B' 列的值。

预期结果:[-5, -2, 7] 因为,df['C'].loc[0] 是 NaN,第一个值是 100 - 105(来自“B”)。 但第二个值是100 -102

【问题讨论】:

    标签: pandas numpy dataframe nan


    【解决方案1】:

    我认为最简单的方法是用Series.fillna 替换另一列的缺失值:

    #if need replace strings NaN to missing values np.nan
    df['C'] = pd.to_numeric(df.C, errors='coerce')
    
    s = df['A'] - df['C'].fillna(df.B)
    print (s)
    0   -5.0
    1   -2.0
    2    7.0
    dtype: float64
    

    numpy.where 的另一个想法并通过Series.isna 测试缺失值:

    a = np.where(df.C.isna(), df['A'] - df['B'], df['A'] - df['C'])
    print (a)
    [-5. -2.  7.]
    

    s = df['A'] - np.where(df.C.isna(),  df['B'], df['C'])
    print (s)
    0   -5.0
    1   -2.0
    2    7.0
    Name: A, dtype: float64
    

    【讨论】:

    • 真的很感激!你如何与熊猫相处融洽?有没有我们可以做或只是体验的练习?
    • @rohan - 这里有一些tutorials
    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 2022-12-22
    • 2015-09-25
    • 2017-09-06
    • 2018-01-14
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多