将两个脚本合并为一个用于csv文件数据验证的代码

问题描述:

大家好我目前有两个脚本,我想将它们合并为一个代码。第一个脚本从一组数据中查找缺失的时间戳,并用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

通过这样做我不会仍然有两个输出文件?我想只有1个输出文件。 – acb

让我们把你的代码作为文件名功能:

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隐含地完成,这是一种良好的做法

在第二个代码中,将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')