【问题标题】:Convert type str (with number and words) column into int pandas将类型 str(带有数字和单词)列转换为 int pandas
【发布时间】:2021-01-02 14:32:55
【问题描述】:

我有一列包含数字和单词的 str 类型:

例如

['2','3','Amy','199','Happy']

我想将所有“str number”转换为 int 并删除(带有)“str words”的行。

所以我的预期输出将是如下列表:

[2, 3, 199]

由于我有一个 pandas 数据框,而且这应该是其中一列,如果它可以是 Series 会更好,如下所示:

0      2.0
1      3.0
3    199.0
dtype: float64

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @rko 他想删除非整数值,就像我的回答一样。
  • 完全错过了删除
  • 您的输入数据是 pandas 数据框还是列表?

标签: python pandas


【解决方案1】:

正如你提到的,你有一个专栏(一个系列),所以假设它叫做s

s = pd.Series(['2', '3', 'Amy', '199', 'Happy'])

然后赋值后,就做pd.to_numeric,把errors='coerce'的参数放进去。然后,用dropna 删除NaNs:

print(pd.to_numeric(s, errors='coerce').dropna())

那么上面的代码就会输出:

0      2.0
1      3.0
3    199.0
dtype: float64

【讨论】:

    【解决方案2】:

    在提供数组时不使用 pandas

    import re
    data = ['2','3','Amy','199','Happy']
    for item in data:
        print (*re.findall(r'\d+',item))
    

    会给

    2
    3
    
    199
     
    

    import re
    data = ['2','3','Amy','199','Happy']
    out = []
    for item in data:
        m = str(*re.findall(r'\d+',item))
        if m != "":
            out.append(int(m))
    print (out)
    

    会给

    [2, 3, 199]
    

    【讨论】:

    • 我认为他希望将结果放在一个只有类似整数值的列表中
    • 我以为他说的是专栏,所以我假设是df
    • 同意,这里是整数,不是浮点数。这是一个更通用的解决方案,适用于数组......只是给猫剥皮的另一种方法
    【解决方案3】:

    您可以使用 isnumeric 过滤掉非数字项。

    s = pd.Series(['2','3','Amy','199','Happy'])
    print(s[s.str.isnumeric()].astype(int))
    

    输出:

    0      2
    1      3
    3    199
    dtype: int64
    

    【讨论】:

    • 不错的答案+1,在我的回答中我使用pd.to_numeric,在这里你直接过滤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多