В Python оператор power записывается как **
(не ^
).
^
является оператором XOR .
Так что, вероятно, вам следует заменить ^
на **
.
Я полагаю, что вы хотите, чтобы исходные числа читались как «истинные» числа (целые или с плавающей точкой), а не в их текстовом представлении.
Из вашего вопроса я также знаю, что вы хотите изменить, например. 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})
Следует отметить следующие моменты: [ 1166]
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, который мог быть прочитан read_excel
.
Затем я выполнил:
df2 = pd.read_excel('Input.xlsx', converters={'C5': arrowToPower})
и получил правильный результат.
Значения, считанные в столбец C5
, были 1
и 81
, поэтому определенно был вызван конвертер arrowToPower
.
Обратите внимание, что первая строка файла Excel содержит имена столбцов, а следующие строки - фактические данные. В случае файлов Excel запятая как разделитель между десятичной и дробной частями является только проблемой представления, и под капотом read_excel
читает внутренний контент. Вот почему параметр decimal здесь не нужен.
Так что я все еще думаю, что ваш входной файл (Excel) в некотором отношении «неправильный», возможно, он не содержит имен столбцов в первой строке.
В построителе интерфейса свяжите класс tableview с вашим пользовательским табличным представлением в представлении инспектора идентичности
ключевые понятия в решении динамического программирования:Существенным свойством битонического тура является то, что вертикальная линия в системе координат пересекает сторону замкнутого многоугольника не более двух раз. Итак, что такое битонический тур ровно по двум точкам? Ясно, что любые две точки образуют (вырожденный) битонный тур. Три точки имеют два битонических обхода («по часовой стрелке» и «против часовой стрелки»).
Теперь, как вы можете предварительно вычислить различные меньшие битонные туры и объединить их, пока вы не включите все точки и все еще не получите битонический тур?
Хорошо, вы на правильном пути с вашим обновлением. Но теперь, в решении динамического программирования, то, что вы делаете, работаете это снизу вверх : предварительно вычисляет и запоминает (не «запоминает») оптимальные подзадачи.