【问题标题】:Replacing all the non-integers with a new integer in a column python用列python中的新整数替换所有非整数
【发布时间】:2022-01-23 01:51:00
【问题描述】:

所以我有一个名为所有者的列,看起来像这样

'Owned by Terrick Inc.',
 nan,
 'Owned by MHPI Inc.',
 'Owned by Zeman Homes & Neighborhoods',
 'Owned by Santefort Neighborhood Properties',
 'Owned by MHPI Inc.',
 'Owned by MHPI Inc.',
 nan,
 2,
 nan,
 5,
 'Owned by RHP Properties',
 'Owned by Zeman Homes & Neighborhoods',
 'Owned by Zeman Homes & Neighborhoods',
 'Owned by Gateway Manufactured Home Community',
 3,
 nan,
 'Owned by Zeman Homes & Neighborhoods',
 'Owned by MHPI Inc.',
 nan,
 'Owned by Indian Trails LLC',
 'Owned by Zeman Homes & Neighborhoods',
 1,
 'Owned by Lake View Manufactured Home Community',
 5,
 2,
 'Owned by Zeman Homes & Neighborhoods'

我正在尝试将所有不是数字的值更改为数字 10。但由于某种原因它无法正常工作。我尝试了 2 种方法,这是第一种,但这只是将整个列替换为 9,因此它不符合我的条件。

df['Owner'][(df['Owner'] != 0) | (df['Owner'] != '1') | (df['Owner'] != '2') | (df['Owner'] != 3) | (df['Owner'] != 4) | (df['Owner'] != 5) | (df['Owner'] != 6)] = 9

我使用的第二种方法是带有 if 语句的循环。但这对列表没有任何作用

for i in df['Owner']:
    if i == 1:
        pass
    elif i == 2:
        pass
    elif i == 3:
        pass
    elif i == 4:
        pass
    elif i == 5:
        pass
    elif i == 6:
        pass
    elif i == 0:
        pass
    else:
        i = 9

提前致谢

【问题讨论】:

    标签: python pandas replace


    【解决方案1】:
    df['Owner'] = [10 if type(x) is not int else x for x in df['Owner']]
    

    应该这样做。它读起来像 Python 中经常出现的简单英语。

    【讨论】:

    • hi Gwang,所以我使用替换来获取 1、2、3、4、5、6。所以我相信dtype仍然是一样的。当我尝试您的代码时,它也将所有内容都更改为 10。我想一个更好的解释我想要做的事情的方法是将所有剩余的东西放在一起进行双变量分析
    • @doskitele 只是表示列中数字的类型不是np.dtype(int)。但也许他们只是int?您是否尝试过使用 in 的第二个建议版本?
    • @doskitele 现在我改成了int,因为它只是int
    【解决方案2】:

    你可以maptype函数,和int比较,然后用where保留整数,其余的用10代替:

    df['Owner'] = df['Owner'].where(df['Owner'].map(type).eq(int), 10)
    

    输出:

      Owner
    0    10
    1    10
    2     2
    3    10
    4     5
    5    10
    

    使用过的输入:

    from numpy import nan
    df = pd.DataFrame({'Owner': ['Owned by MHPI Inc.', nan, 2, nan, 5, 'Owned by RHP Properties',]})
    

    【讨论】:

    • 应该是.neq(int) 还是?
    • 这很有效,非常感谢
    • @Gwang-JinKim 不,为什么?实际上你可以使用nemask
    • @mozway - 我认为否定是失踪的。但您的代码确实可以完美运行。啊我被np.where()弄糊涂了。
    • @mozway 因为在np.where(<condition>, x) x 意味着用x替换条件为真的地方。但也许这不是真的......
    猜你喜欢
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多