2017-02-21 8 views
1

Привет всем, у меня есть два сценария, которые я хотел бы объединить в один код. Первый скрипт находит отсутствующие метки времени из набора данных и заполняет пустую строку значениями NaN, а затем сохраняет выходной файл. Второй скрипт сравнивает разные строки в наборе данных и создает новый столбец с значениями True/False на основе условия теста.Объединение двух скриптов в один код для проверки данных csv-файлов

Если я запускаю каждый скрипт как функцию, то вызываю обе с другой функцией, я получаю два отдельных выходных файла. Как я могу сделать этот запуск только с одним сохраненным выходным файлом?

Первый код

import pandas as pd 
df = pd.read_csv("data5.csv", index_col="DateTime", parse_dates=True) 
df = df.resample('1min').mean() 
df = df.reindex(pd.date_range(df.index.min(), df.index.max(), freq="1min")) 
df.to_csv("output.csv", na_rep='NaN') 

Второй код

with open('data5.csv', 'r') as f: 
    rows = [row.split(',') for row in f] 
    rows = [[cell.strip() for cell in row if cell] for row in rows] 

def isValidRow(row): 
    return float(row[5]) <= 900 or all(float(val) > 7 for val in row[1:4]) 

header, rows = rows[0], rows[1:] 
validRows = list(map(isValidRow, rows)) 

with open('output.csv', 'w') as f: 
    f.write(','.join(header + ['IsValid']) + '\n') 
    for row, valid in zip(rows, validRows): 
     f.write(','.join(row + [str(valid)]) + '\n') 
+1

Установите входной файл для второго как выход первого? –

+0

Делая это, у меня еще нет двух выходных файлов? Я хотел бы иметь только один выходной файл. – acb

ответ

2

Пусть поместить свой код в функции имен файлов:

def first_code(file_in, file_out): 
    df = pd.read_csv(file_in, ...) 
    ... 
    df.to_csv(file_out, ...) 

def second_code(file_in, file_out): 
    with open(file_in, 'r') as f: 
     ... 
    .... 

    with open(file_out, 'w') as f: 
     ... 

Ваше решение может затем быть:

first_code('data5.csv', 'output.csv') 
second_code('output.csv', 'output.csv') 

Надеется, что это помогает


Обратите внимание, что не читают проблемы и писать в том же файл. Убедитесь, что файл ранее закрыт, чтобы избежать побочного эффекта. Это косвенно делается с помощью with, что является хорошей практикой

1

Во втором коде, измените data5.csv который является первым входом второго кода в output.csv. и убедитесь, что файлы file1.py и file2.py находятся в одном каталоге. поэтому ваш модифицированный код в одном файле будет следующим:

import pandas as pd 
df = pd.read_csv("data5.csv", index_col="DateTime", parse_dates=True) 
df = df.resample('1min').mean() 
df = df.reindex(pd.date_range(df.index.min(), df.index.max(), freq="1min")) 
df.to_csv("output.csv", na_rep='NaN') 

with open('output.csv', 'r') as f: 
    rows = [row.split(',') for row in f] 
    rows = [[cell.strip() for cell in row if cell] for row in rows] 

def isValidRow(row): 
    return float(row[5]) <= 900 or all(float(val) > 7 for val in row[1:4]) 

header, rows = rows[0], rows[1:] 
validRows = list(map(isValidRow, rows)) 

with open('output.csv', 'w') as f: 
    f.write(','.join(header + ['IsValid']) + '\n') 
    for row, valid in zip(rows, validRows): 
     f.write(','.join(row + [str(valid)]) + '\n')