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)
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)
使用字典来抓取标题然后循环可以获得干净利落的需求.
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)
| 归档时间: |
|
| 查看次数: |
71546 次 |
| 最近记录: |