如何根据条件重命名列中的项目?

How do I rename items from a column according to criteria?

我有以下数据框:

      import pandas as pd
      df = pd.DataFrame({'ID': [1,2,3,4,5],
                         'Name_columns': ['1', '2', '2022', '1', '1']})

      print(df)

      ID    Name_columns
       1       1
       2       2
       3       2022
       4       1
       5       1

我想替换“Name_columns”列中的值。哪里是 1 我想写“SENSOR”,哪里是 2 写“ACTUATOR”。所以我尝试使用 replace():

执行以下代码
      df['Name_columns'] = df['Name_columns'].str.replace('1', 'SENSOR')
      df['Name_columns'] = df['Name_columns'].str.replace('2', 'ACTUADOR')

得到的结果输出是:

      print(df)

      ID    Name_columns
      1      SENSOR
      2      ACTUADOR
      3      ACTUADOR0ACTUADORACTUADOR
      4      SENSOR
      5      SENSOR

我想问一下如何保留值 1 和 2 的实现,如果与这些值不同,我该如何写“无效”?

使用字典 map the values and fillna 默认字符串:

d = {'1': 'SENSOR', '2': 'ACTUADOR'}

df['Name_columns'] = df['Name_columns'].astype(str).map(d).fillna('Invalid')

注意。如果该列已经是一个字符串,您可以省略 astype(str) 输出:

   ID Name_columns
0   1       SENSOR
1   2     ACTUADOR
2   3      Invalid
3   4       SENSOR
4   5       SENSOR

A pandas.Series 有一个 map 方法,该方法接受字典作为参数,并将不在字典中的键保留为 nan

df['Name_columns'].map({'1': 'SENSOR', '2': 'ACTUATOR'}).fillna('INVALID')

# 0      SENSOR
# 1    ACTUATOR
# 2     INVALID
# 3      SENSOR
# 4      SENSOR