Как заменить определенное значение во всем CSV-файле пандами? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть большой CSV-файл, который я импортирую в панды.Первая строка - это заголовок столбцов (даже если это значения).Моя цель - заменить все значения от -999,999 до 0.

Я уже пытался сделать свою первую строку в качестве заголовка df.colums = df.iloc [0], но безуспешно.Для замены значений я попытался использовать df.replace, но, похоже, он не находит значения -999,99.

import pandas as pd

df = pd.read_csv('Test.csv') # importer le dossier CSV 

df.columns = df.iloc[0]
df.replace(-999.999, 0, inplace=True)

df.to_csv('test2.csv')

Файл CSV выглядит так, где первый столбец (0-1-2 ...) был создан автоматически, а не частью исходных данных.

  -120;-119.7;-119.4;-119.1;-118.8;-118.5;-118.2;-117.9
0  -999.999;-999.999;-999.999;20.1;1.2;89.5;-999....   
1  -999.999;-999.999;4.6;25.6;8.9;-999.999;-999.9...   
2  -999.999;-999.999;8.66;12.6;7.6;-999.999;13.98...   
3  -999.999;-999.999;9.12;6.98;0.6;45.3;12.4;-999...   
4  -999.999;-999.999;13.36;4.56;3.9;2.36;-999.999...   
5  -999.999;-999.999;-999.999;21;45.2;-999.999;-9...   

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Первая проблема заключается в том, что вам нужно указать разделитель, вторая проблема с replace заключается в том, что он будет преобразован в float64, поэтому использование replace(-999.999, 0) не будет работать.

from io import StringIO

s = '''-120;-119.7;-119.4;-119.1;-118.8;-118.5;-118.2;-117.9
-999.999;-999.999;-999.999;20.1;1.2;89.5;-999
-999.999;-999.999;4.6;25.6;8.9;-999.999;-999.9
-999.999;-999.999;8.66;12.6;7.6;-999.999;13.98
-999.999;-999.999;9.12;6.98;0.6;45.3;12.4;-999
-999.999;-999.999;13.36;4.56;3.9;2.36;-999.999
-999.999;-999.999;-999.999;21;45.2;-999.999;-9'''

df = pd.read_csv(StringIO(s), sep=';')

df = df.replace(df.iloc[0,0], 0) # specify a cell with the value you want to replace

или выможно использовать float64 число:

df.replace(-999.9989999999999, 0)

   -120  -119.7  -119.4  -119.1  -118.8  -118.5  -118.2  -117.9
0   0.0     0.0    0.00   20.10     1.2   89.50 -999.00     NaN
1   0.0     0.0    4.60   25.60     8.9    0.00 -999.90     NaN
2   0.0     0.0    8.66   12.60     7.6    0.00   13.98     NaN
3   0.0     0.0    9.12    6.98     0.6   45.30   12.40  -999.0
4   0.0     0.0   13.36    4.56     3.9    2.36    0.00     NaN
5   0.0     0.0    0.00   21.00    45.2    0.00   -9.00     NaN

. Для реального файла StringIO будет заменен путем к файлу.

Первый столбец, как вы его называете, - это index если вы не хотите его выводить просто df.to_csv('file.csv', index=False)

0 голосов
/ 07 февраля 2019

pd.read_csv() использует разделитель по умолчанию ',' - передайте аргумент sep=';' для ваших данных.Чтобы исключить индекс в выводе, просто передайте аргумент index=False в df.to_csv().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...