【问题标题】:Delete specific rows and columns from csv using Python in one step使用 Python 一步删除 csv 中的特定行和列
【发布时间】:2018-11-19 00:20:23
【问题描述】:

我有一个 csv 文件,我需要在其中删除第二行和第三行以及第 3 到第 18 列。我能够分两步让它工作,这产生了一个临时文件。我在想必须有一个更好、更紧凑的方法来做到这一点。任何建议将不胜感激。

另外,如果我想删除多个列范围,我该如何在这段代码中指定。例如,如果我想删除第 25 到 29 列,除了已经指定的第 3 到 18 列,我将如何添加到代码中?谢谢

remove_from = 2
remove_to = 17

with open('file_a.csv', 'rb') as infile, open('interim.csv', 'wb') as outfile: 

    reader = csv.reader(infile)
    writer = csv.writer(outfile)

    for row in reader:
        del row[remove_from : remove_to]
        writer.writerow(row)

with open('interim.csv', 'rb') as infile, open('file_b.csv', 'wb') as outfile:

    reader = csv.reader(infile)
    writer = csv.writer(outfile)

    writer.writerow(next(reader))  

    reader.next()
    reader.next()

    for row in reader: 
        writer.writerow(row)

【问题讨论】:

  • 你愿意使用 pandas 吗?
  • 是的,我想知道如何在 pandas 而不是 pandas 中做到这一点。
  • 几乎没有比使用临时文件然后覆盖原始文件更有效的方法,但如果您坚持here is how to edit a file in-place(还包括就地和临时文件方法和综合基准测试的各种示例)。

标签: python csv


【解决方案1】:

这是一种熊猫方法:

第 1 步,创建示例数据框

import pandas as pd

# Create sample CSV-file (100x100)
df = pd.DataFrame(np.arange(10000).reshape(100,100))
df.to_csv('test.csv', index=False)

第 2 步,施展魔法

import pandas as pd
import numpy as np

# Read first row to determine size of columns
size = pd.read_csv('test.csv',nrows=0).shape[1]

#want to remove columns 25 to 29, in addition to columns 3 to 18 already specified,
# Ok so let's create an array with the length of dataframe deleting the ranges
ranges = np.r_[3:19,25:30]
ar = np.delete(np.arange(size),ranges)

# Now let's read the dataframe
# let us also skip rows 2 and 3
df = pd.read_csv('test.csv', skiprows=[2,3], usecols=ar)

# And output
dt.to_csv('output.csv', index=False)

还有证明:

【讨论】:

  • 非常感谢您的详细解答!
  • @RJL 如果您满意,您可以接受答案。如果没有,您也许可以指出缺少的内容:)
  • 抱歉错过了。我通常只是投了赞成票,现在我看到我需要绿色复选框。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多