为什么这个 for 循环给我这个错误?

时间:2021-01-11 15:34:47

标签: python-3.x nameerror

我写了以下循环:

pdFrame = []
for dir, subdir, files in os.walk(path):
    for file in files:
        if glob2.fnmatch.fnmatch(file, '*.gz'):
            columns = ['Gene_ID', file[:file.find('.')]]
            df = pd.read_csv(os.path.join(dir, file), compression='gzip', sep='\t', names=columns, header=None)
            df = df.set_index('Gene_ID')
            for name, value in df.items():
                pdFrame.append(value)
            data_frame = pd.concat(pdFrame, axis=1, ignore_index=False)
data_frame.to_csv('final_samples.csv', header=True)

但是,我不断收到以下错误:

"NameError: name 'data_frame' 未定义"

根据错误,有一些值必须是 'False' ,这就是为什么这些值没有发布到变量,但我不明白为什么。

1 个答案:

答案 0 :(得分:0)

您应该尝试在条件语句之外声明 data_frame。在您的 if 语句不返回 true 的情况下,data_frame 永远不会被定义。因此,无法调用 data_frame.to_csv(),因为它不存在。

或者,您可以在调用 to_csv() 之前检查 data_frame 是否为空

pdFrame = []
data_frame = None
for dir, subdir, files in os.walk(path):
    for file in files:
        if glob2.fnmatch.fnmatch(file, '*.gz'):
            columns = ['Gene_ID', file[:file.find('.')]]
            df = pd.read_csv(os.path.join(dir, file), compression='gzip', sep='\t', names=columns, header=None)
            df = df.set_index('Gene_ID')
            for name, value in df.items():
                pdFrame.append(value)
            data_frame = pd.concat(pdFrame, axis=1, ignore_index=False)
if data_frame is not None:
    data_frame.to_csv('final_samples.csv', header=True)