【问题标题】:Delete specific columns from csv file in python3从python3中的csv文件中删除特定列
【发布时间】:2018-05-08 00:39:02
【问题描述】:

需要删除多个csv文件的某些特定列和行(按索引),而不创建新文件。

对于下面的代码,它在每行之后给出带有新空白行的输出。

import csv

with open('file.csv') as fd:
   reader = csv.reader(fd)
   valid_rows = [row for idx, row in enumerate(reader) if idx != 0]

with open('file.csv', 'w') as out:
   csv.writer(out).writerows(valid_rows)

什么是更简单的方法(可能是其他 python 库)?

【问题讨论】:

  • 能否提供样例csv?
  • @wp78de 需要从源文件中删除列/行,而不创建新文件。
  • 但是你写入文件——不管是同一个文件还是一个新文件。

标签: python-3.x csv


【解决方案1】:

由于您不想生成任何新的 csv 文件并希望数据执行操作,我建议您使用Pandas Framework。在这个框架中使用drop函数。

考虑以下示例:

Sample.csv:

col1,col2,col3,col4
1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16
17,18,19,20

代码:

import pandas as pd
df = pd.read_csv('./Sample.csv')

删除列:

df.drop('col3', axis = 1, inplace = True)

df 内容:

   col1     col2    col4
0   1   2   4
1   5   6   8
2   9   10  12
3   13  14  16
4   17  18  20

删除行:

df.drop(df.index[[1,4]], inplace = True)

df 内容:

   col1     col2    col4
0   1   2   4
2   9   10  12
3   13  14  16

最后保存编辑后的csv文件:

df.to_csv('new_sample.csv', index = False)

【讨论】:

  • 您好,此解决方案仅用于读取数据。我还需要对 csv 文件进行更改(删除行和列)。
  • @ShailaZaman,为此使用inplace 选项。我已经编辑了代码。看看吧
  • 请您详细说明 df 在哪里变为无?我给出的代码是一个工作示例。 (检查您是否没有错误地删除所有列或行)
  • 那是我的错误。这是工作。太感谢了。您能否将您对 csv 行的文字编辑到以下行? df.to_csv('sample.csv', index=False) 保存的是索引为df的csv。
猜你喜欢
  • 2015-03-12
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 2012-07-13
相关资源
最近更新 更多