仅当列的dtype为数字时,才如何使用熊猫删除尾随零?

时间:2020-11-05 12:30:26

标签: python pandas dataframe

假设我有一个这样的数据框,

A        |  B
2.000000 | "hello 1.0"
3.00000  | "mellow"
         | "trello 9.0 elo"
4.0      | "cello 3.00"
         

我如何获得这样的输出

A   |  B
2   | "hello 1.0"
3   | "mellow"
    | "trello 9.0 elo"
4   | "cello 3.00"

我想将所有列dtypes转换为字符串;但是,我希望仅当列的dtype为数字时才能删除尾随零。

有一种解决方案,您可以使用lambda函数,但我不完全记得格式。

到目前为止,我有这个

df[base_column].astype(str).str.replace(‘.0’, ‘ ‘).replace('nan', np.nan).replace('None', np.nan)

但是此代码还将B列也从hello 1.0转换为hello 1

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

我猜为.0值缺少值的原因,因此可以使用integer_na

cols = df.select_dtypes(np.number).columns
df[cols] = df[cols].astype('Int64')

如果需要将所有数字替换为带有删除的结尾.0的字符串,请使用:

cols = df.select_dtypes(np.number).columns
df[cols] = df[cols].astype(str).replace('\.0','',regex=True).replace(['nan','None'], np.nan)

答案 1 :(得分:0)

这只会使数字成为整数备用字符串

 def func(row):
        if type(row[0])!=str:
            return (int(row[0]))
 df.apply(func,axis=1)