使用python删除CSV中的列

Jef*_*eff 27 python csv row-removal

我已经能够使用本网站上几个用户的输入创建一个python的csv,我想对你的帖子表示感谢.我现在很难过,并将发表我的第一个问题.

我的input.csv看起来像这样:

day,month,year,lat,long
01,04,2001,45.00,120.00
02,04,2003,44.00,118.00
Run Code Online (Sandbox Code Playgroud)

我试图删除"年"列及其所有条目.从1960年到2010年,总共有40多个条目,年份范围很广.

S.L*_*ott 44

import csv
with open("source","rb") as source:
    rdr= csv.reader( source )
    with open("result","wb") as result:
        wtr= csv.writer( result )
        for r in rdr:
            wtr.writerow( (r[0], r[1], r[3], r[4]) )
Run Code Online (Sandbox Code Playgroud)

顺便说一句,for循环可以删除,但不是真正简化.

        in_iter= ( (r[0], r[1], r[3], r[4]) for r in rdr )
        wtr.writerows( in_iter )
Run Code Online (Sandbox Code Playgroud)

此外,您可以以超文字的方式遵循删除列的要求.我发现这通常是一个糟糕的政策,因为它不适用于删除多个列.当您尝试删除第二个时,您会发现位置已全部移位且结果行不明显.但仅限于一列,这是有效的.

            del r[2]
            wtr.writerow( r )
Run Code Online (Sandbox Code Playgroud)

  • 通过首先删除最高列,您可以轻松地将第二种方法用于多列,例如'del r [8] del r [6] del r [2] wtr.writerow(r)' (4认同)

Sun*_*rat 28

使用Pandas模块会容易得多.

import pandas as pd
f=pd.read_csv("test.csv")
keep_col = ['day','month','lat','long']
new_f = f[keep_col]
new_f.to_csv("newFile.csv", index=False)
Run Code Online (Sandbox Code Playgroud)

这里有简短的解释:

>>>f=pd.read_csv("test.csv")
>>> f
   day  month  year  lat  long
0    1      4  2001   45   120
1    2      4  2003   44   118
>>> keep_col = ['day','month','lat','long'] 
>>> f[keep_col]
    day  month  lat  long
0    1      4   45   120
1    2      4   44   118
>>>
Run Code Online (Sandbox Code Playgroud)


Aim*_*rdo 7

使用字典来抓取标题然后循环可以获得干净利落的需求.

import csv
ct = 0
cols_i_want = {'cost' : -1, 'date' : -1}
with open("file1.csv","rb") as source:
    rdr = csv.reader( source )
    with open("result","wb") as result:
        wtr = csv.writer( result )
        for row in rdr:
            if ct == 0:
              cc = 0
              for col in row:
                for ciw in cols_i_want: 
                  if col == ciw:
                    cols_i_want[ciw] = cc
                cc += 1
            wtr.writerow( (row[cols_i_want['cost']], row[cols_i_want['date']]) )
            ct += 1
Run Code Online (Sandbox Code Playgroud)


小智 6

我会使用 Pandascol number

f = pd.read_csv("test.csv", usecols=[0,1,3,4])
f.to_csv("test.csv", index=False)
Run Code Online (Sandbox Code Playgroud)