【问题标题】:Replaces spaces with NAN in pandas dataframe在 pandas 数据框中用 NAN 替换空格
【发布时间】:2016-10-16 16:04:23
【问题描述】:

我有一个包含三列的 pandas 数据框:

Name        Name2           DateTime
                            2016-06-10 05:22
                            2016-06-10 05:23
                            2016-06-10 14:25
Guest       Guest1          2016-06-10 15:32

我必须用 NAN 替换空格。所以第 1、2、3 和 4 行的 AccountName 和 AccountName2 应该是 NAN。我尝试了以下语句:

 df3['Name'] = df3['Name'].replace(r'[^\s+]',np.nan, regex=True)

但由于我在 Name 中的“Guest”之后有空格,所以所有 5 行都被 NAN 替换。

编辑:

这是我们的实际数据。

Name              Name2                  DateTime
\t\t-\r\n\t      \t\t-\r\n\t            2016-06-10 05:22
\t\t-\r\n\t      \t\t-\r\n\t            2016-06-10 05:23
\t\t-\r\n\t      \t\t-\r\n\t            2016-06-10 14:25
\t\tGuest\r\n\t  \t\tGuest1\r\n\t       2016-06-10 15:32

我用它来删除那些转义字符。

df['Name'] = df['Name'].str.replace('\r','').str.replace('\t','').str.replace('\n','').str.replace('-','')

删除这些字符后,我不确定现在在那个地方插入了什么。

【问题讨论】:

  • 你可以去掉空格然后替换df['Name'].str.strip().replace(r'[^\s+]',np.nan, regex=True)
  • df['Name'] 是 float64 类型。我正在尝试将其转换为字符串然后替换它,但我仍然不成功。
  • 有字符串怎么可能是float64?
  • @jezrael:我已经编辑了问题
  • 客人姓名中的空格需要保留吗?

标签: python pandas ipython


【解决方案1】:

如果您确定名称之间不会有空格,您可以使用 .strip() 删除字符串末尾的任何空格(或其他任何内容)。

 df3['Name'] = df3['Name'].strip().replace(r'[^\s+]',np.nan, regex=True)

【讨论】:

  • strip 不是 Series str.strip 的方法,它要求 dtype 是 str,OP 已经表明它不是
  • 啊,我明白问题所在了。也许您可以尝试使用 DataFrame.applymap() 并使用剥离字符串的函数映射每个元素,然后用 nan 替换。
【解决方案2】:

由于您不需要空格,因此应该可以。

df3['Name'] = df3['Name'].replace('[\s]+',"", regex=True) #Gets rid of all blank spaces
df3['Name'] = df3['Name'].replace('',np.nan, regex=True) #Replace completely empty cells with nan

【讨论】:

    【解决方案3】:

    另一种解决方案是找到length 的数据,然后将boolean indexing 替换为长度为01 的所有数据:

    print (df.applymap(len))
       Name  Name2  DateTime
    0     0      0        16
    1     0      0        16
    2     0      0        16
    3     5      6        16
    
    df[df.applymap(len) < 2] = np.nan
    print (df)
        Name   Name2          DateTime
    0    NaN     NaN  2016-06-10 05:22
    1    NaN     NaN  2016-06-10 05:23
    2    NaN     NaN  2016-06-10 14:25
    3  Guest  Guest1  2016-06-10 15:32
    

    【讨论】:

    • 超级。我很高兴,因为我曾经做过类似的替换,很恐怖。
    • 是的,从昨天开始一直在拉我的腿,非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2022-10-05
    • 2021-11-20
    • 2021-11-24
    • 2015-08-04
    • 2018-01-26
    • 2017-04-04
    相关资源
    最近更新 更多