Реорганизовать CSV, поэтому даты не являются заголовками столбцов

Я пытаюсь реорганизовать таблицу excel (или csv), так что даты больше не являются заголовками столбцов. Я использую ограниченное знание python, чтобы попытаться это сделать, но из-за отсутствия знания, с чего начать, я могу использовать некоторую помощь.

Под каждой датой записывается то, что произошло в тот день для определенного места. Нулевые значения могут быть пропущены. Некоторые ячейки содержат «-» и могут быть преобразованы в 0. Я хотел бы сделать столбец для даты и столбца, чтобы обозначить числовое чтение за день. Название места – это новая строка, если в тот день ее контролировали.

Пример (smh у человека, который начал его таким образом):

Name,7/1/2009,7/2/2009,7/3/2009,7/4/2009..... (and so on to the present) Place A,,5,3, Place B,0,,23,-- Place C,1,2,,35 

Я бы хотел:

 Name, Date, Reading Place A, 7/2/2009, 5 Place A, 7/3/2009, 3 Place B, 7/1/2009, 0 Place B, 7/4/2009, 0 <--- Even though this is a dash originally it can be converted to a 0 to keep the number an int. 

Есть сотни строк (мест), а столбцы (даты) попадают в BPD (это правильные 1772 столбца!).

То, что вы пытаетесь сделать, это нормализовать как таблицу.

Как вы это делаете в общем случае: для каждой строки в денормальной таблице вы вставляете строки в обычную таблицу для каждого столбца denormal.

То, как вы это делаете, в частности, зависит от того, как вы обрабатываете таблицы. Например, если вы используете модуль csv , в Python 3.x, с CSV-файлом Excel по умолчанию, он будет выглядеть примерно так:

 with open('old.csv') as oldcsv, open('new.csv', 'w') as newcsv: r, w = csv.reader(oldcsv), csv.writer(newcsv) header = next(r) w.writerow(['Name', 'Date', 'Reading']) for row in r: for colname, colval in zip(header[1:], row[1:]): w.writerow([row[0], colname, colval]) 

Если вы хотите использовать, например, xlrd / xlwt , XlsxReader / XlsxWriter , win32com скрипты Excel и т. Д., Детали будут разными, но основная идея будет такой же: перебирать строки, а затем перебирать столбцы даты , создавая новую строку для каждого из них на основе имени из строки, даты из заголовка столбца и значения из строки.

И вы должны быть в состоянии выяснить, как пропустить нулевые значения, конвертировать "--" в 0 и т. Д. Здесь.

Код ниже довольно понятен, даже если вы только начинаете с python :

enumerate – это итератор для индекса, значение iterable

 >>> content = """Name,7/1/2009,7/2/2009,7/3/2009,7/4/2009 ... Place A,,5,3, ... Place B,0,,23,-- ... Place C,1,2,,35""" >>> >>> lines = [line.split(',') for line in content.split('\n')] >>> >>> for line in lines: ... if 'Name' not in line[0]: ... for count, date in enumerate(lines[0]): ... if count >= 1: ... if not line[count] or line[count] == '--': ... line[count] = 0 ... # write (line[0], date, line[count]) to a file or print it: ... print (line[0], date, line[count]) ... ('Place A', '7/1/2009', 0) ('Place A', '7/2/2009', '5') ('Place A', '7/3/2009', '3') ('Place A', '7/4/2009', 0) ('Place B', '7/1/2009', '0') ('Place B', '7/2/2009', 0) ('Place B', '7/3/2009', '23') ('Place B', '7/4/2009', 0) ('Place C', '7/1/2009', '1') ('Place C', '7/2/2009', '2') ('Place C', '7/3/2009', 0) ('Place C', '7/4/2009', '35') 

Следующий код будет нормализовать в качестве таблицы csv описанного вами формата и вывести новый файл csv с строками для каждой пары (Place, Date), которая имеет запись. Он также изменит любую запись, указанную как «-», на 0.

 oldlist = [] newlist = ['Name,Date,Reading'] with open('path_to_csv.csv') as oldcsv, open('newcsv.csv', 'w') as newcsv: for line in oldcsv: line = line.strip('\n') oldlist.append(line.split(',')) for (i,row) in enumerate(oldlist[1:]): for (j, column) in enumerate(row[1:]): if column != '': newrow = [] newrow.append(row[0]) #Adds place name to each newlist row. newrow.append(oldlist[0][j+1]) #Adds date to each newlist row. if column == '--': newrow.append('0') else: newrow.append(column) #Adds reading to each newlist row. newlist.append(",".join(newrow)) for line in newlist: newcsv.write("%s\n" % line) 
  • Числа в CSV-файле, сгенерированные Excel
  • Импорт csv с цитированной новой строкой с использованием QueryTables в Excel
  • Написание отдельных слов на ячейку Excel с использованием csv в Python?
  • Открытие файла .csv с использованием только «;» в качестве разделителя
  • Преобразование xls в точку с запятой с разделителем csv с помощью командной строки sffffice
  • импортировать файл csv excel в heidiSQL
  • Импорт CSV в веб-приложение
  • Java - запись строк в файл CSV
  • Вставить CSV или данные с разделителями табуляции, чтобы преуспеть без форматирования NO
  • Вычислить 30-минутные средние и сезонные средние значения в python?
  • Текст в иврите Csv не в порядке
  • Interesting Posts

    Первая используемая строка в выбранной колонке

    не удалось выделить память <NoMemoryError>

    Создание общего кода кода VBA Checkbox_Click

    Код Excel VBA для входа в систему

    Невозможно сделать суммы ячейки после экспорта сетки DevExpress в Excel

    Я не смог обновить данные из файла excel из oledb C #

    Excel сбрасывается при установке ширины столбцов списка (в VBA) во время инициализации пользовательской формы

    Импорт из MSSQL в Excel, когда данные содержат встроенные разрывы строк

    Формулы или VBA – найдите строку и определенное количество символов после нее

    сравнение данных в двух столбцах excel на основе сопоставления столбцов excel

    VBA Macro: пытается ввести код «если две ячейки одинаковы, тогда ничего, иначе сдвиньте строки вниз»,

    Как подсчитывать от активной ячейки до вершины?

    Используйте только одну формулу в Excel для подсчета результатов нескольких COUNTIF

    Когда я очищаю строки, я теряю функции ячейки

    Применение макроса к диапазону ячеек

    Давайте будем гением компьютера.