Python 3.x 如何用熊猫替换整个CSV文件中的特定值?
我有一个大的csv文件,我导入到熊猫。第一行是列的标题(即使是值)。我的目标是将-999.999的所有值替换为0 我已经尝试使用df.colums=df.iloc[0]作为标题创建第一行,但没有成功。为了替换值,我尝试使用df.replace,但它似乎找不到-999.99值Python 3.x 如何用熊猫替换整个CSV文件中的特定值?,python-3.x,pandas,dataframe,indexing,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
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...
pd.read_csv()
使用默认分隔符,“
-请传递参数sep=”;”代码>用于您的数据。要消除输出中的索引,只需将参数index=False
传递给df.To_csv()
pd.read_csv()
使用默认分隔符,“
-请传递参数sep=”;”代码>用于您的数据。要消除输出中的索引,只需将参数index=False
传递给df.To_csv()
第一个问题是需要指定分隔符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
将替换为文件路径
第一列,如您所称,是索引
,如果您不想在输出中只df.to_csv('file.csv',index=False)
第一个问题是您需要指定分隔符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
将替换为文件路径
第一列,如您所称,是索引
,如果您不希望它出现在输出中,只需df.to_csv('file.csv',index=False)
您的数据是否可以作为字符串加载而不是浮动?在pd.read_csv之后,在这个问题中显示df.info()
。df.info()给出以下内容:RangeIndex:6个条目,0到5个数据列(共1列):-120-119.7;-119.4;-119.1;-118.8;-118.5;-118.2;-117.9 6非空对象数据类型:对象(1)内存使用:128.0+字节>CSV文件如下所示,其中自动创建了第一列(0-1-2…)。。。这就是所谓的索引(pd.index
)如果你想做一些研究,你的数据可能是以字符串而不是浮点数的形式加载的吗?在pd.read_csv之后,在这个问题中显示df.info()
。df.info()给出以下内容:RangeIndex:6个条目,0到5个数据列(共1列):-120-119.7;-119.4;-119.1;-118.8;-118.5;-118.2;-117.9 6非空对象数据类型:对象(1)内存使用:128.0+字节>CSV文件如下所示,其中自动创建了第一列(0-1-2…)。。。如果你想做一些研究,那就是所谓的索引(pd.index
)