#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)