【问题标题】:Deleting rows from several CSV files using Python使用 Python 从多个 CSV 文件中删除行
【发布时间】:2019-11-17 11:58:14
【问题描述】:

我想从每个 csv 中删除特定的行。我的目录中的文件(即从第 0 行到第 33 行),但我有 224 个单独的 csv。需要做的文件。如果您帮助我如何使用一个代码来执行此操作,我会很高兴。

【问题讨论】:

  • 您必须将所有行从文件读取到内存,删除选定的行并将所有行写回文件。如果你创建了一个文件名的函数,那么你可以使用os.listdir() 来获取目录中所有文件的名称,并将你的函数用于每个文件名。
  • 您要覆盖原始文件吗?

标签: python pandas csv numpy data-manipulation


【解决方案1】:

我认为你可以很容易地使用 glob 和 pandas 来做到这一点,我不确定你是否想覆盖你的原始文件,这是我从不推荐的,所以要小心,因为这段代码会这样做。

import os
import glob
import pandas as pd

os.chdir(r'yourdir')
allFiles = glob.glob("*.csv") # match your csvs
for file in allFiles:
   df = pd.read_csv(file)
   df = df.iloc[33:,] # read from row 34 onwards.
   df.to_csv(file)
   print(f"{file} has removed rows 0-33")

或者类似的东西..

【讨论】:

    【解决方案2】:

    这是两个独立任务的简单组合。

    首先,您需要遍历文件夹中的所有 csv 文件。请参阅this StackOverflow answer 了解如何执行此操作。

    接下来,在该循环中,对于每个文件,您需要通过删除行来修改 csv。请参阅this answer 了解如何读取 csv、写入 csv 以及根据条件省略某些行。

    最后一个方面是您希望省略某些行号。一个很好的方法是使用 enumerate 函数。

    所以这样的代码会给你行号。

    import csv
    input = open('first.csv', 'r')
    output = open('first_edit.csv', 'w')
    writer = csv.writer(output)
    for i, row in enumerate(input):
        if i > 33:
            writer.writerow(row)
    input.close()
    output.close()
    

    【讨论】:

      【解决方案3】:

      遍历 CSV 文件并使用 Pandas 删除每个文件的前 34 行,然后将其保存到输出目录。

      安装pandas后试试这个代码:

      from pathlib import Path
      import pandas as pd
      
      source_dir = Path('path/to/source/directory')
      output_dir = Path('path/to/output/directory')
      
      for file in source_dir.glob('*.csv'):
          df = pd.read_csv(file)
          df.drop(df.head(34).index, inplace=True)
          df.to_csv(output_dir.joinpath(file.name), index=False)
      
      

      【讨论】:

        猜你喜欢
        • 2011-12-15
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 2021-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        相关资源
        最近更新 更多