【问题标题】:How to replace a specific value in an entire CSV file with pandas?如何用熊猫替换整个CSV文件中的特定值?
【发布时间】:2019-02-07 14:00:20
【问题描述】:

我有一个大型 csv 文件,我将其导入到 pandas。第一行是列的标题(即使它是值)。我的目标是将 -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...   

【问题讨论】:

  • 您的数据是否可以作为字符串而不是浮点数加载?在 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 个非空对象 dtypes:object(1) 内存使用量:128.0+ 字节
  • > CSV 文件如下所示,其中第一列 (0-1-2...) 是自动创建的...如果您愿意,这就是所谓的索引 (pd.Index)一些研究

标签: python-3.x pandas dataframe indexing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 2020-05-28
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多