如何从pandas中的对象列中提取和替换整型值和浮点值

如何从pandas中的对象列中提取和替换整型值和浮点值,pandas,Pandas,我有一列字符串和数字。因此,数据类型为object。我想提取所有整数/浮点数。我想把一系列的整数归为某个特定的类。因此,我想用它的类名替换这个数字。 我尝试了以下方法: diabetes_data[diabetes_data['diag_1'].apply(lambda x: str(x).isdigit())]['diag_1']).replace(['[1-100)'],'Circulatory', inplace = True) 我试图用类名circulatory替换1-100范围内的数

我有一列字符串和数字。因此,数据类型为object。我想提取所有整数/浮点数。我想把一系列的整数归为某个特定的类。因此,我想用它的类名替换这个数字。 我尝试了以下方法:

diabetes_data[diabetes_data['diag_1'].apply(lambda x: str(x).isdigit())]['diag_1']).replace(['[1-100)'],'Circulatory', inplace = True)

我试图用类名circulatory替换1-100范围内的数字。

您可以使用以下函数:

def change_values(x):
    if str(x).isdigit() and x>0 and x<=100:
        return 'category'
    else:
        return x

diabetes_data['diag_1'] = diabetes_data['diag_1'].apply(lambda x: change_values(x))
def change_值(x):

如果str(x).isdigit()和x>0以及x0和x,则可以使用函数:

def change_values(x):
    if str(x).isdigit() and x>0 and x<=100:
        return 'category'
    else:
        return x

diabetes_data['diag_1'] = diabetes_data['diag_1'].apply(lambda x: change_values(x))
def change_值(x):

如果str(x).isdigit()和x>0以及x0和x解决方案1很好且很短,请检查该值是否在
范围(1100)
内,如果是,则将其替换为:

diabetes_data = pd.DataFrame(data={'diag_1': ['a', 'b', 1, 2, 101]})

diabetes_data['diag_1'] = diabetes_data['diag_1'].mask(
    diabetes_data['diag_1'].isin(range(1, 100)), 
    'Circulatory',
)
解决方案2:您还可以与一些正则表达式一起使用来解决此问题:

diabetes_data['diag_1'] = (diabetes_data['diag_1']
    .astype(str)
    .str.replace('^[1-9]{1,2}$|^100$', 'Circulatory'))
解决方案3:用于找出哪些行是数字,然后使用以下命令更改这些行:

mask=diag_数据['diag_1'].map(np.isreal)
糖尿病数据['diag_1'].loc[mask]=np.where(
(糖尿病数据['diag_1'].loc[mask]>=1)

&(糖尿病数据['diag_1'].loc[mask]解决方案1简洁,检查值是否在
范围(1100)
内,如果是,则替换为:

diabetes_data = pd.DataFrame(data={'diag_1': ['a', 'b', 1, 2, 101]})

diabetes_data['diag_1'] = diabetes_data['diag_1'].mask(
    diabetes_data['diag_1'].isin(range(1, 100)), 
    'Circulatory',
)
解决方案2:您还可以与一些正则表达式一起使用来解决此问题:

diabetes_data['diag_1'] = (diabetes_data['diag_1']
    .astype(str)
    .str.replace('^[1-9]{1,2}$|^100$', 'Circulatory'))
解决方案3:用于找出哪些行是数字,然后使用以下命令更改这些行:

mask=diag_数据['diag_1'].map(np.isreal)
糖尿病数据['diag_1'].loc[mask]=np.where(
(糖尿病数据['diag_1'].loc[mask]>=1)
&(糖尿病数据['diag_1'].loc[mask]