如何在更改pandas Dataframe 中的格式之前检测特定字符

py49o6xq  于 2023-05-12  发布在  其他
关注(0)|答案(2)|浏览(114)

我的dataframe是这样的在下面...

0    1    2
0   1   02    3
1   1   04   04
2   1   54   04
3   1    *    *

然而,我想要的结果是...

0    1   2
0   1    2   3
1   1    4   4
2   1   54   4
3   1    *   *

我想将02格式化为仅2。我的解决方案之一是使用if-else方法来避免“*”,而02将被格式化为2。但是它不起作用,我假设MasterDf.iloc[:,2]引用了整个列。

if MasterDf.iloc[:,2].str.contains('*'):
    pass
else:
    MasterDf.iloc[:,2] = MasterDf.iloc[:,2].astype('int64')
mrzz3bfm

mrzz3bfm1#

使用replace和正则表达式:

out = df.replace(r'^0', '', regex=True)
  • 注意。如果您只想删除后面跟数字的0 s,请使用df.replace('^0(?=\d+)', '', regex=True)。*

输出:

0   1  2
0  1   2  3
1  1   4  4
2  1  54  4
3  1   *  *

Regex:

^    # match start of string
0    # match 0

更复杂的替代方案,使用str.lstrip和就地修改:

df.update(df.select_dtypes('object').apply(lambda c: c.str.lstrip('0')))
34gzjxbg

34gzjxbg2#

只是为了好玩,如何applymap与自定义转换器

def convert(value):
    try: 
        return int(value)
    except ValueError:
        return value

df2 = df.applymap(convert)
print (df2)

   0   1  2
0  1   2  3
1  1   4  4
2  1  54  4
3  1   *  *

如果需要将其应用于特定列:

df[[1, 2]] = df[[1, 2]].applymap(convert)

相关问题