我有一个很大的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...
答案 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
。