разделение, перестановка и объединение строк в фрейме данных

#python #string #dataframe #split

#python #строка #фрейм данных #разделение

Вопрос:

У меня есть следующий фрейм данных, прочитав файл csv.

 INPUT:
def convert_potentials(potential_data):
      data = pd.read_csv(potential_data, sep=';', skiprows = 1,
                         names=["Half reaction", "Electrode potential/V"])
            
      print(data)

convert_potentials(oxidation_potentials.txt)
  

Вывод:

                    Half reaction           Electrode potential/V
0                  Na -> Na    e-                    2.71
1               Co2  -> Co3    e-                   -1.81
2                 H2 -> 2H    2e-                   -0.00
  

Я хочу изменить значение «Электродный потенциал» на — (Электродный потенциал), и я хочу изменить уравнение в «Половинной реакции» в обратном порядке.

Ожидаемый результат:

                    Half reaction           Electrode potential/V
0                  Na    e- -> Na                    -2.71
1               Co3    e- -> Co2                     1.81
2                 2H    2e- -> H2                    0.00
  

Для достижения этой цели я использовал следующие решения:

     data['Electrode potential/V'] = -data['Electrode potential/V']
    
    def rearrange(x):
        return "->".join(data['Half reaction'].str.split(pat = "->")[::-1])
    
    data['Half reaction'] = data['Half reaction'].apply(rearrange)

    return data
    
  

Я получаю ожидаемое значение для потенциала электрода, но ошибку для половинной реакции:

 TypeError: sequence item 0: expected str instance, list found
  

Я знаю, что мне нужно разделить строку, но я не знаю, как изменить ее обратно, как я хочу, в ожидаемом результате.

Ответ №1:

Насколько я понимаю, ваша функция перестановки должна быть такой:

 def rearrange(x):
        return " -> ".join(x.split("->")[::-1])
  

потому что вы используете его для применения, а не для прямого манипулирования данными.

Ответ №2:

Функция apply применяет функцию к каждой строке в столбце. Таким образом, вам не нужно указывать данные, которые вы хотите использовать внутри функции (data[‘Half reaction’]). Вместо этого данные передаются через переменную x из определения вашей функции.

Insted использует x для доступа к данным:

 def rearrange(x):
    return x.split(' ')[::-1]

data['Half reaction'].apply(rearrange)