【问题标题】:Why does this for loop give me this error?为什么这个 for 循环会给我这个错误?
【发布时间】:2021-01-11 15:34:47
【问题描述】:

我写了以下循环:

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:名称'data_frame'未定义”

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

【问题讨论】:

  • 你应该用一种语言来标记它..
  • 请分享更多细节以及您的调试尝试

标签: python-3.x nameerror


【解决方案1】:

您应该尝试在条件语句之外声明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)

【讨论】:

  • 感谢您的回复。我尝试了您的解决方案,但循环仍然无法正常工作。它似乎创建了一个以 'none' 作为其字符串的变量。出于某种原因,它仍然没有将 data_frame 识别为将保存我的值的变量。还有什么我可以尝试的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多