python - 如果特定列的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
解决方案
如果我理解正确,请尝试:
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
推荐阅读
- mysql - MySQL JOIN 用于对具有一对多关系的表进行排序
- xml - XSLT 1.0 删除前导零并将小数点添加到值
- git - 分支存在,但在 refs/heads 中看不到
- javascript - Weback 清单文件无法编译为 es5
- azure - Azure powershell - 获取具有大小的 VM 列表
- angular - 在 Angular2+ 中的两个元素之间创建视觉映射
- python - 从提取的 JSON 时间索引中获取分钟,与当前时间进行比较。
- regex - sas、prchange、reg ex、非结构化数据
- bash - 如何将 git bash 终端恢复到以前的彩色状态?
- excel - 在vbscript中用管道分隔文本文件到csv文件