Csv 删除多列

Csv 删除多列,csv,multiple-columns,Csv,Multiple Columns,我试图一次删除多个列,而不使用它们的字段信息。我每个月都会收到一份来自该县的CSV文件,有多个字段我不想与公众共享。到目前为止,每个月我都会手动删除每个字段。因为我正在尝试学习python,所以我想学习如何创建一个脚本来完成它。我想删除58个字段,所以我不想为每个字段编写脚本,但我希望创建一个范围来删除它们。我在这里搜索了几个小时的论坛,尝试了很多不同的方法,我不知道从哪里开始或停止。如果您有任何帮助,我们将不胜感激。假设您有如下CSV文件: Name,Sex,Address,Age John,

我试图一次删除多个列,而不使用它们的字段信息。我每个月都会收到一份来自该县的CSV文件,有多个字段我不想与公众共享。到目前为止,每个月我都会手动删除每个字段。因为我正在尝试学习python,所以我想学习如何创建一个脚本来完成它。我想删除58个字段,所以我不想为每个字段编写脚本,但我希望创建一个范围来删除它们。我在这里搜索了几个小时的论坛,尝试了很多不同的方法,我不知道从哪里开始或停止。如果您有任何帮助,我们将不胜感激。

假设您有如下CSV文件:

Name,Sex,Address,Age
John,M,New York,40
Mary,F,Los Angeles,30
您只想保留列
名称
地址

然后您可以使用
DictWriter
类的
extrasignore
参数执行类似的操作(Python 3):

import csv
fields = ["Name", "Address"]

with open("test.csv") as infile, open("out.csv", "w", newline="") as outfile:
    #           in Python 2, use open("out.csv", "wb") as outfile:
    r = csv.DictReader(infile)
    w = csv.DictWriter(outfile, fields, extrasaction="ignore")
    w.writeheader()
    for row in r:
        w.writerow(row)
结果:

Name,Address
John,New York
Mary,Los Angeles
如果你想用另一种方式,我。E指定要从文件中删除的列,这样会有点复杂:

import csv
delete = ["Sex", "Age"]

with open("test.csv") as infile, open("out.csv", "w", newline="") as outfile:
    #           in Python 2, use open("out.csv", "wb") as outfile:
    r = csv.DictReader(infile)
    firstrow = next(r)  # Need to read the first row so we know the fieldnames
    fields = r.fieldnames
    w = csv.DictWriter(outfile, 
                       [field for field in fields if not field in delete], 
                       extrasaction="ignore")
    w.writeheader()
    w.writerow(firstrow)
    for row in r:
        w.writerow(row)

我很懒,所以我喜欢在可能的时候使用现有的图书馆,并且已经成为图书馆的福音传道者。使用@Tim Pietzcker的例子:

Name,Sex,Address,Age
John,M,New York,40
Mary,F,Los Angeles,30
我们只能使用以下方法保留所需的列:

import pandas as pd
df = pd.read_csv("to_remove.csv")
keep_cols = ["Name", "Address"]
new_df = df[keep_cols]
new_df.to_csv("removed.csv", index=False)
(我们也可以用一行,但我认为这样更清楚。)


解释如下。首先,我们可以将文件读入名为
数据帧的存储对象中:

>>> import pandas as pd
>>> df = pd.read_csv("to_remove.csv")
>>> df
   Name Sex      Address  Age
0  John   M     New York   40
1  Mary   F  Los Angeles   30
我们可以从该对象中选择一列或多列:

>>> df[["Name", "Sex"]]
   Name Sex
0  John   M
1  Mary   F
然后写出来:

>>> new_df = df[["Name", "Sex"]]
>>> new_df.to_csv("removed.csv", index=False)
(index=False
位只是告诉它不要添加一列来计算行数,上面的数字是0和1),生成

Name,Sex
John,M
Mary,F
我们还可以决定只保留以字母“A”开头的列:

或者使用
.ix
方法仅保留从#1到倒数第二的列:

>>> df.ix[:,1:-1]
  Sex      Address
0   M     New York
1   F  Los Angeles

诸如此类。

你试过这个[删除列-python][1][1]:我确实看过了。我想保留100多个字段,所以我尽量不把它们一一列出。除非我误解了该职位的所有建议,否则这就是我需要做的。我愿意把它们全部列出,但如果可能的话,我宁愿避免。
>>> df.ix[:,1:-1]
  Sex      Address
0   M     New York
1   F  Los Angeles