В Python , оператор power записывается как **
(не ^
).
^
равно XOR operator.
Так что, вероятно, вам следует заменить ^
на **
.
Редактировать после вашего комментария
Я полагаю, что вы хотите, чтобы исходные числа читались как "истинные "числа (целые или с плавающей точкой), а не в их текстовом представлении.
Из вашего вопроса я также знаю, что вы хотите изменить, например, 2^0
на промежуточное значение 2**0
и сохранить его также какчисло (в данном случае 1
).
Мне не удалось подготовить исходный файл .xlsx (несмотря на мои усилия, мой Юпитер продолжал жаловаться, что это не в кодировке UTF-8 ), поэтому я подготовил пример с чтением из файла .csv .
Итак, давайте начнем с исходного файла .csv :
C1;C2;C3;C4;C5;C6;C7;C8
geeky;0;1,9921875;0;2^0;0;T_U8;0
xyz;0;3,2044218;1;3^4;3;T_X2;4
Первое, на что нужно обратить внимание, это то, что разделитель полей - ;
(не запятая).Это необходимо, поскольку числа с плавающей запятой между целой и дробной частью имеют запятую (вместо точки).
C5
столбец содержит 2^0
и 3^4
, которые должны быть преобразованы в промежуточную формуиз 2**0
и 3**4
и, наконец, в 1
и 81
.
Для выполнения вышеуказанного преобразования я написал функцию:
arrowToPower = lambda x : eval(x.replace('^', '**'))
Затем чтение DataFrame можетбудет выполняться следующим образом:
df = pd.read_csv('Input.csv', sep=';', decimal=',', converters={'C5': arrowToPower})
Обратите внимание на следующие моменты:
Input.csv
- имя входного файла. sep=';'
указываетРазделитель столбцов. decimal=','
указывает, что разделяет целую и дробную части. converters={'C5': arrowToPower}
назначает функцию преобразования для столбца C5
.
Когда вынапечатайте df
, результат будет:
C1 C2 C3 C4 C5 C6 C7 C8
0 geeky 0 1.992188 0 1 0 T_U8 0
1 xyz 0 3.204422 1 81 3 T_X2 4
Чтобы прочитать из файла Excel , вы должны изменить read_csv
на read_excel
, изменить имя файла и удалить sep
параметр.
Если у вас есть больше столбцов с ^
вместо **
, присвойте преобразователю также значениеэти столбцы.
Редактирование, касающееся чтения файла Excel
Наконец мне удалось написать такой файл Excel, который может быть прочитан read_excel
.

Затем я выполнил:
df2 = pd.read_excel('Input.xlsx', converters={'C5': arrowToPower})
и получил правильный результат.
Значения, прочитанные в столбец C5
, были 1
и 81
, так что arrowToPower
конвертер определенно был вызван.
Обратите внимание, что первая строка файла Excel содержит имена столбцов, а следующие строки - фактические данные.В случае файлов Excel запятая как разделитель между десятичной и дробной частями - это только проблема представления, а под капотом read_excel
читает внутреннее содержимое.Вот почему параметр десятичный здесь не нужен.
Так что я все еще думаю, что ваш входной (Excel) файл в некотором отношении «неправильный», возможно, он не содержит имен столбцов вПервый ряд.