【发布时间】:2019-02-15 03:37:26
【问题描述】:
我保证在我来发这篇文章之前,我已经搜索并阅读了几页谷歌。我发誓,尽职调查已经完成。
我正在尝试在 python 中打开一个 CSV 文件,读取该文件,对其进行更改,然后写出一个新文件。
我已经走到这一步了:
import csv
def water_data ():
with open('aquastat.csv', 'r') as csv_file:
csv_reader = csv.reader(csv_file)
final_file_name = "final_water.data.csv"
final_file = open(final_file_name,'w')
csv_writer = csv.writer(final_file,delimiter="\t")
for row in csv_reader:
csv_writer.writerow(row)
但我正在努力取得进一步进展。我想删除某些列,但我无法理解 python 如何知道行和列之间的区别。例如,列是Area, Area ID, Year, Value等,我只想要Area, Year, Value。我试过了
for row in final_file:
final_file.writerow(row[0] + row[2] + row[4] + row[5])
但我不断收到以下错误:IndexError: list index out of range
[我也想用*替换空白单元格,但列的东西是优先的]
请注意,我不能使用 Pandas
如果可能的话,如果有人能告诉我代码,而是向我解释一下,以便我自己进一步弄清楚,我将不胜感激。
TLDR:如何从 CVS 文件中删除空行并仅将某些列写入新文件?
输入:
"Area","Area Id","Variable Name","Variable Id","Year","Value","Symbol","Md"
"Afghanistan",2,"Total area of the country",4100,1977,65286.0,"E","",""
"Afghanistan",2,"Total area of the country",4100,1982,65286.0,"E","",""
"Afghanistan",2,"Total area of the country",4100,1987,65286.0,"E","",""
"Afghanistan",2,"Total area of the country",4100,1992,65286.0,"E","",""
"Afghanistan",2,"Total area of the country",4100,1997,65286.0,"E","",""
"Afghanistan",2,"Total area of the country",4100,2002,65286.0,"E","",""
【问题讨论】:
-
你能给我们一部分输入吗?
-
"Area","Area Id","Variable Name","Variable Id","Year","Value","Symbol","Md" "Afghanistan",2,"Total国家面积",4100,1977,65286.0,"E","","""阿富汗",2,"全国总面积",4100,1982,65286.0,"E","","" "阿富汗",2,"全国总面积",4100,1987,65286.0,"E","","""阿富汗",2,"全国总面积",4100,1992,65286.0," E","","""阿富汗",2,"全国总面积",4100,1997,65286.0,"E","","""阿富汗",2,"全国总面积" ,4100,2002,65286.0,"E","",""
-
您能否也为输入添加您的预期输出?
-
我不确定。我只是想清理数据。我希望数据相同,但没有区域 ID 列,或者没有空行
-
@AshleyF 你需要用 Python 来做吗?否则,您可以使用简单的 bash 命令,例如
cat File.csv | cut -d, -f1,5,6