Так как sdk 23 или выше вводит новый способ запроса разрешений, поэтому, если вы запуститесь в Marshmallow, он покажет эту ошибку.
Решение: установите targetSdkVersion ниже 23 в файл манифеста, такой как thisroid: targetSdkVersion = "21"
pandas.read_csv
имеет параметр decimal
для этого: doc
I.e. попробуйте:
df = pd.read_csv(Input, delimiter=";", decimal=",")
Отвечаю на вопрос о том, как изменить десятичную comma
на десятичную dot
с Pandon Pandas.
$ cat test.py
import pandas as pd
df = pd.read_csv("test.csv", quotechar='"', decimal=",")
df.to_csv("test2.csv", sep=',', encoding='utf-8', quotechar='"', decimal='.')
, где мы указываем чтение в десятичном разделителе как запятую, а вывод разделитель указан как точка. Итак,
$ cat test.csv
header,header2
1,"2,1"
3,"4,0"
$ cat test2.csv
,header,header2
0,1,2.1
1,3,4.0
, где вы видите, что разделитель изменился на точку.
Я думаю, что ранее упомянутый ответ включения decimal=","
в pandas read_csv является предпочтительным вариантом.
Однако я обнаружил, что он несовместим с механизмом синтаксического анализа Python. например при использовании skiprow=
read_csv вернется к этому движку и, следовательно, вы не сможете использовать skiprow=
и decimal=
в том же самом read_csv, насколько я знаю. Кроме того, мне не удалось фактически заставить оператор decimal=
работать (возможно, из-за меня)
. Длинный путь, который я использовал для достижения того же результата, - это понимание списков, .replace
и .astype
. Главным недостатком этого метода является то, что он должен выполняться по одному столбцу за раз:
df = pd.DataFrame({'a': ['120,00', '42,00', '18,00', '23,00'],
'b': ['51,23', '18,45', '28,90', '133,00']})
df['a'] = [x.replace(',', '.') for x in df['a']]
df['a'] = df['a'].astype(float)
Теперь столбец a будет иметь ячейки типа float. Столбец b все еще содержит строки.
Обратите внимание, что используемая здесь .replace
не является пандой, а встроенной версией Python. Версия Pandas требует, чтобы строка была точным совпадением или регулярным выражением.