如何用熊猫替换整个CSV文件中的特定值?

时间:2019-02-07 14:00:21

标签: python-3.x pandas dataframe indexing

我有一个很大的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 :(得分:2)

第一个问题是您需要指定分隔符,第二个问题是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)

答案 1 :(得分:0)

-ea -Daccess_key=<access_key> -Dsecret_key=<secret_key> 使用默认分隔符pd.read_csv()-请为您的数据传递参数','。要消除输出中的索引,只需将参数sep=';'传递给index=False