Как удалить столбцы в файле CSV?
Мне удалось создать csv с python, используя входные данные нескольких пользователей на этом сайте, и я хочу выразить благодарность за ваши сообщения. Я сейчас в тупике и отправлю свой первый вопрос.
Мой input.csv выглядит следующим образом:
day,month,year,lat,long
01,04,2001,45.00,120.00
02,04,2003,44.00,118.00
Я пытаюсь удалить столбец "год" и все его записи. Всего существует более 40 записей с диапазоном лет от 1960-2010 годов.
Ответы
Ответ 1
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]) )
Кстати, цикл for
может быть удален, но не очень упрощен.
in_iter= ( (r[0], r[1], r[3], r[4]) for r in rdr )
wtr.writerows( in_iter )
Кроме того, вы можете гиперболичным образом придерживаться требований по удалению столбца. Я считаю, что это плохая политика в целом, потому что она не относится к удалению более одного столбца. Когда вы пытаетесь удалить второе, вы обнаруживаете, что все позиции сместились и результирующий ряд не очевиден. Но только для одного столбца это работает.
del r[2]
wtr.writerow( r )
Ответ 2
Использование модуля 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)
И вот короткое объяснение:
>>>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
>>>
Ответ 3
Использование dict для захвата заголовков, а затем циклического перехода вы получите то, что вам нужно.
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
Ответ 4
вы можете использовать пакет csv
для итерации по вашему csv файлу и вывода столбцов, которые вы хотите использовать в другом CSV файле.
Приведенный ниже пример не проверен и должен иллюстрировать решение:
import csv
file_name = 'C:\Temp\my_file.csv'
output_file = 'C:\Temp\new_file.csv'
csv_file = open(file_name, 'r')
## note that the index of the year column is excluded
column_indices = [0,1,3,4]
with open(output_file, 'w') as fh:
reader = csv.reader(csv_file, delimiter=',')
for row in reader:
tmp_row = []
for col_inx in column_indices:
tmp_row.append(row[col_inx])
fh.write(','.join(tmp_row))
Ответ 5
Сверху моей головы, это сделает это без какой-либо проверки ошибок или настройки чего-либо. Это "осталось читателю".
outFile = open( 'newFile', 'w' )
for line in open( 'oldFile' ):
items = line.split( ',' )
outFile.write( ','.join( items[:2] + items[ 3: ] ) )
outFile.close()
Ответ 6
Вы можете напрямую удалить столбец только с помощью
del variable_name['year']
Ответ 7
Это зависит от того, как вы храните анализируемый CSV, но обычно вам нужен оператор del.
Если у вас есть массив dicts:
input = [ {'day':01, 'month':04, 'year':2001, ...}, ... ]
for E in input: del E['year']
Если у вас есть массив массивов:
input = [ [01, 04, 2001, ...],
[...],
...
]
for E in input: del E[2]
Ответ 8
Пытаться:
result= data.drop('year', 1)
result.head(5)