【问题标题】:Replace na values in columns by values based on dict or list将列中的 na 值替换为基于 dict 或 list 的值
【发布时间】:2022-10-01 02:01:21
【问题描述】:

我有一个字典和两个列表,其中包含我的数据框的某些列(不是全部):

dict = {\'a_n1\' : \'a_n\', 
        \'b_n1\', \'b_n\', 
        \'c_n1\' : \'c_n\',
                   ...} #lenght of 124

list_1 = [a_n1, b_n1, c_n, d_n, ...] #(lenght of 124)

list_2 = [a_n, b_n, c_n, d_n, ...] #(lenght of 124)

数据框示例:

        a_n1        a_n       b_n1      b_n
0       2150        NaN       Nan       12
1       NaN         140       74,1      NaN
2       7160        NaN       100       41.2
3       NaN         NaN       NaN       NaN
4       90          50        17        NaN
        ...         ...        ...          ...

如果 list_1 的列中的值是 na 而不是 list_2 中的列的值,我希望我的值被 list_2 中的列的值替换。

期望的输出:

        a_n1        a_n       b_n1      b_n
0       2150        NaN       12        12
1       140         140       74,1      NaN
2       7160        NaN       100       41.2
3       NaN         NaN       NaN       NaN
4       90          50        17        NaN
        ...         ...        ...          ...

到目前为止,这是我的尝试,如果我的数据框的列在 list_1 中并且值为 na,我设法在 IPython 控制台中返回一个布尔值,但我不知道如何返回 list_2 中列的值

df.columns.isin(list_1) & df.isna()

感谢任何可以启发我如何做到这一点以及如何使我的编码更清晰的人

  • 你能显示所有数据吗?df 是什么?

标签: python pandas dataframe


【解决方案1】:

尝试:

import numpy as np

df
    a_n1    a_n     b_n1    b_n
0   2150.0  NaN     Nan     12.0
1   NaN     140.0   74,1    NaN
2   7160.0  NaN     100     41.2
3   NaN     NaN     NaN     NaN
4   90.0    50.0    17      NaN

a = df.filter(regex=r'.*_n1$').columns.tolist()   # a --> ['a_n1', 'b_n1']
b = df.filter(regex=r'.*_n$').columns.tolist()  # b --> ['a_n', 'b_n']

for i, j in zip(a, b):
    print(i, j)
    df[f'{i}'] = np.where(df[f'{i}'].isna(), df[f'{j}'], df[f'{i}'])

df
    a_n1    a_n     b_n1    b_n
0   2150.0  NaN     Nan     12.0
1   140.0   140.0   74,1    NaN
2   7160.0  NaN     100     41.2
3   NaN     NaN     NaN     NaN
4   90.0    50.0    17      NaN

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 2013-03-15
    • 2018-09-11
    • 2017-08-11
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多