Иногда, когда вы добавляете новую библиотеку, вводите конфликтовую версию System.Windows.Interactivity.dll
.
Это предотвращает работу проекта.
Чтобы исправить, добавьте привязку к сборке Переадресуйте, отредактировав свой app.config
, чтобы выглядеть примерно так:
Не беспокойтесь об изменении PublicKeyToken
, который является постоянным во всех версиях, так как это зависит на имя .dll, а не на версию.
Убедитесь, что вы сопоставляете newVersion
в своем appConfig
с фактической версией, на которую вы указываете:
В 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) в некотором отношении «неправильный», возможно, он не содержит имен столбцов в первой строке.