首页 > 解决方案 > 如果特定列的df值的位数大于或等于12,则将特定列的df值转换为字符串

问题描述

如果这些数字的位数大于等于 12,我试图将几列中的这些值转换为字符串。

我这样做是为了避免在我写这些数字的 excel 时显示科学计数法。

我试过的代码: -

def count_digits(string):
 if string is None:
    return 0
 string=str(string)
 return sum(item.isdigit() for item in string)

if df['col1'].apply(count_digits) or df['col2'].apply(count_digits) or df['col3'].apply(count_digits) >= 12:
  df.values=str(df.values())

样品df:-

Param  col1      col2         col3
A      56465780  56.678       None
B      19937000  430624000    26847651.79
D      4457000   999999999999 None
H      256000    344578000    None
K      225000    35           NaN
E      219000    NaN          None

标签: pythonpython-3.xpandasdataframe

解决方案


如果我理解正确,请尝试:

def count_digits(string):
    if pd.isna(string):
        return ''
    elif (isinstance(string,(float,int))) or (string.isnumeric()):
        if len(str(string))>=12:
            return str(string)
        else:
            return string
    else:
        return string

Finally:
df.replace({'None':None,'nan':float('NaN')}).applymap(count_digits)

输出:

  Param      col1                col2         col3
0     A  56465780  56.677999999999997             
1     B  19937000         430624000.0  26847651.79
2     D   4457000      999999999999.0             
3     H    256000         344578000.0             
4     K    225000                35.0             
5     E    219000                                

或者

如果您不想将小数点后的数字计算.为长度,请使用:

def count_digits(string):
    if pd.isna(string):
        return ''
    elif (isinstance(string,(float,int))) or (string.isnumeric()):
        if len(str(string).split('.')[0])>=12:
            return str(string)
        else:
            return string
    else:
        return string 

推荐阅读