Как оценить фрейм данных, содержащий выражения мощности в python

Иногда, когда вы добавляете новую библиотеку, вводите конфликтовую версию System.Windows.Interactivity.dll.

Это предотвращает работу проекта.

Чтобы исправить, добавьте привязку к сборке Переадресуйте, отредактировав свой app.config, чтобы выглядеть примерно так:




  
    
      
      
    
  



  

Не беспокойтесь об изменении PublicKeyToken, который является постоянным во всех версиях, так как это зависит на имя .dll, а не на версию.

Убедитесь, что вы сопоставляете newVersion в своем appConfig с фактической версией, на которую вы указываете:

0
задан Geeky 26 February 2019 в 07:20
поделиться

1 ответ

В 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

Наконец мне удалось написать такой файл Excel, который мог быть прочитан read_excel.

enter image description here

Затем я выполнил:

df2 = pd.read_excel('Input.xlsx', converters={'C5': arrowToPower})

и получил правильный результат.

Значения, считанные в столбец C5, были 1 и 81, поэтому определенно был вызван конвертер arrowToPower.

Обратите внимание, что первая строка файла Excel содержит имена столбцов, а следующие строки - фактические данные. В случае файлов Excel запятая как разделитель между десятичной и дробной частями является только проблемой представления, и под капотом read_excel читает внутренний контент. Вот почему параметр decimal здесь не нужен.

Так что я все еще думаю, что ваш входной файл (Excel) в некотором отношении «неправильный», возможно, он не содержит имен столбцов в первой строке.

0
ответ дан Valdi_Bo 26 February 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: