用列python中的新整数替换所有非整数

Posted

技术标签:

【中文标题】用列python中的新整数替换所有非整数【英文标题】:Replacing all the non-integers with a new integer in a column 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

提前致谢

【问题讨论】:

【参考方案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替换条件为真的地方。但也许这不是真的......

以上是关于用列python中的新整数替换所有非整数的主要内容,如果未能解决你的问题,请参考以下文章

Python - SkLearn Imputer 用法

Python:无法替换列表中的项目,原因是:TypeError:列表索引必须是整数或切片,而不是 str

用列/系列中的值替换熊猫子字符串

查找列中的所有非整数

Python:通过非整数比例因子重新缩放熊猫中的时间序列

将浮点数乘以 Python 中的函数并且无法将序列乘以“浮点”类型的非整数