Игнорирование символа при чтении csv pandas
Есть csv вида
"Дата","Цена","Откр.","Макс.","Мин.","Объём","Изм. %" "30.08.2022","19.792,6","20.295,6","20.558,2","19.559,7","308,41K","-2,48%" "29.08.2022","20.295,8","19.551,3","20.394,5","19.551,2","248,04K","3,81%" "28.08.2022","19.550,2","20.034,2","20.150,8","19.542,9","159,60K","-2,41%"
читаю его через pandas:
import Pandas as pd
df = pd.read_csv('file.csv')[['Цена','Откр.','Макс.','Мин.','Изм. %']]
И получаю
Цена Откр. Макс. Мин. Изм. %
0 19.792,6 20.295,6 20.558,2 19.559,7 -2,48%
1 20.295,8 19.551,3 20.394,5 19.551,2 3,81%
2 19.550,2 20.034,2 20.150,8 19.542,9 -2,41%
3 20.033,9 20.249,9 20.343,6 19.849,8 -1,07%
Как можно получить данные вида
Цена Откр. Макс. Мин. Изм. %
0 19792.6 20295.6 20558.2 19559.7 -2,48
1 20295.8 19551.3 20394.5 19551.2 3,81
2 19550.2 20034.2 20150.8 19542.9 -2,41
3 20033.9 20249.9 20343.6 19849.8 -1,07
То есть как можно убрать лишние символы без изменения в файле?
Ответы (3 шт):
Автор решения: mike1452
→ Ссылка
Нашел способ
df = df.replace(to_replace ='[%.]', value = '', regex = True).replace(to_replace =',', value = '.', regex = True)
выдает нужный результат
Автор решения: Зарина
→ Ссылка
import pandas as pd
w = lambda x: (x.replace('.','').replace(",", ".")) # функция, которая уберет точки и заменит запятую на точку
z = lambda x: (x.replace('%','')) # функция, которая уберет %
# функция converters применит функцию w ко всем колонкам, которые вы укажете
df = pd.read_csv('file.csv', converters={'Цена':w, 'Откр.':w, 'Макс.':w, 'Мин.':w, 'Изм. %':z})[['Цена','Откр.','Макс.','Мин.','Изм. %']]
Автор решения: strawdog
→ Ссылка
можно сразу читать файл с нужной конвертацией. и научитесь задавать нужные колонки при открытии файла:
df = pd.read_csv("file.csv", decimal=",", thousands=".", usecols=[1,2,3,4,6],
converters = {6:lambda x: float(x.strip('%').replace(",","."))})
df:
Цена Откр. Макс. Мин. Изм. %
0 19792.6 20295.6 20558.2 19559.7 -2.48
1 20295.8 19551.3 20394.5 19551.2 3.81
2 19550.2 20034.2 20150.8 19542.9 -2.41