'''
检查包含缺失值的编号列 有多少需要转换为整数字符串的
为避免计数函数忽略缺失值, 需要先将列转换为字符串格式, 或者采用value_counts(dropna=False)
两种方法比较 https://cloud.tencent.com/developer/article/2134113
结论 编号列含缺失值和浮点数 不能整列直接转换为整数
'''
from deepdiff import DeepDiff
seri_1 = df_1.物料号.astype(str).value_counts().sort_index() # 索引为字符串格式 缺失值已转化为'nan'
seri_2 = df_1.物料号.value_counts(dropna=False).sort_index() # 索引为浮点数格式 缺失值为NaN
seri_1.index == seri_2.index.astype(str)
DeepDiff(
seri_1.to_frame().astype(str).to_dict('records'),
seri_2.to_frame().astype(str).to_dict('records'),
ignore_order= True
) # {}表示无区别
'''
https://www.cnblogs.com/jebeljebel/p/4006433.html # isdigit、isdecimal、isnumeric的区别
https://stackoverflow.com/questions/68239333/pandas-str-isnumeric-for-floats
https://pythonhow.com/how/check-if-a-string-is-a-float/
'''
# import pandas as pd
# import numpy as np
'''
# 判断是否是 数字 或缺失值 或数字字符串 或缺失值字符串
# 缺失值字符串包括 nan任意大小写字符串
'''
def is_float(x):
try:
float(x)
except ValueError: # 非数字且非缺失值字符串
return False
except TypeError: # None
return False
else:
return True
seri = pd.Series([0, 1.0, np.nan, '3E0', 'NAn', 'a5', None])
seri.apply(is_float)
'''
但这不是我想要的 我想要的是只能筛选出整数和浮点数的函数
int只能转化整数 浮点数 整数字符串 其他都不行
'''
def canbe_int(x):
try:
int(x)
return True
except ValueError:
return False
except TypeError: # None
return False
seri = pd.Series([0, 1.0, np.nan, '3E0', 'NAn', 'a5', None])
seri.apply(canbe_int)
'''分类转化 np.where和query在此不管用'''
seri = pd.Series([0, 1.0, np.nan, '3E0', 'NAn', 'a5', None])
seri.loc[seri.apply(canbe_int)] = seri.loc[seri.apply(canbe_int)].astype(int).astype(str)
seri.loc[seri.apply(canbe_int)==False] = ''
seri
标签:False,int,编号,字符串,return,缺失,seri
From: https://blog.51cto.com/u_16055028/6283503