繁体   English   中英

Pandas:df(数据帧)未定义

[英]Pandas: df (dataframe) is not defined

我正在尝试从xlsx文件加载和编辑 dataframe 。 该文件位于我在变量einlesen中定义的路径中。 修复错误后,我想删除一行并将新的 dataframe 保存在特定路径的新xlsx文件中。

import os
import re
import pandas as pd
import glob
import time

def setwd():
    from pathlib import Path
    import os

    home = str(Path.home())
    
    os.chdir(home + r'\...\...\Staffing Report\Input\...\Raw_Data')
    
    latest = home + r'\...\...\Staffing Report\Input\MyScheduling\Raw_Data'
    
    folders = next(os.walk(latest))[1]
    creation_times = [(folder, os.path.getctime(folder)) for folder in folders]
    creation_times.sort(key=lambda x: x[1])
    
    most_recent = creation_times[-1][0]
    print('test' + most_recent)
    
    os.chdir(latest + '\\' + most_recent + '\\')
    
    print('current cwd is: ' + os.getcwd())
    
    save_dir = home + '\...\...\Staffing Report\Input\MyScheduling\Individual Status All\PBI\\' + 'Individual_Status.xlsx'
    

def rowdrop():
    
    einlesen = os.getcwd()
    print('test einlesen: ' + einlesen)
    
    df = pd.DataFrame()
    df = pd.read_excel('Individual Status.xls', sheet_name = 'Individual Status Raw Data')
    df = pd.DataFrame(df)

#main

setwd()
rowdrop()

df.to_excel(save_dir, index = False)

print(df)

如果我试图运行代码,它总是指出:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-92-060708f6b065> in <module>
      2 rowdrop()
      3 
----> 4 df.to_excel(save_dir, index = False)
      5 
      6 print(df)

NameError: name 'df' is not defined

您收到错误是因为您只在rowdrop function 中定义了df 在 function 中定义的变量只能在函数内部访问,除非你做一些改变。

更改您的 function 以返回df

def rowdrop():
    
    einlesen = os.getcwd()
    print('test einlesen: ' + einlesen)
    
    df = pd.DataFrame()
    df = pd.read_excel('Individual Status.xls', sheet_name = 'Individual Status Raw Data')
    df = pd.DataFrame(df)
    return df

并将 function 调用的返回值赋给一个变量:

df = rowdrop()

另一种被认为是不好的做法是使用global方法使df变量成为全局变量:

def rowdrop():
    global df
    einlesen = os.getcwd()
    print('test einlesen: ' + einlesen)

    df = pd.DataFrame()
    df = pd.read_excel('Individual Status.xls', sheet_name = 'Individual Status Raw Data')
    df = pd.DataFrame(df)

使用上述方法,您无需将 function 调用分配给变量,但请不要使用该方法,请参阅为什么全局变量是邪恶的?

您应该在 function rowdrop 中返回rowdrop 我想指出的是,您的 function 的名称可能不是最相关的,因为它也会创建并返回 dataframe。

def rowdrop():
    
    einlesen = os.getcwd()
    print('test einlesen: ' + einlesen)
    
    df = pd.DataFrame()
    df = pd.read_excel('Individual Status.xls', sheet_name = 'Individual Status Raw Data')
    df = pd.DataFrame(df)
    return df

#main

setwd()
df = rowdrop()

您遇到的NameError是因为您从 function rowdrop()外部引用变量df 你应该在 function 中调用这个df.to_excel(save_dir, index = False)

我建议您在 Google 上搜索“Python 中的变量范围”以查找更多信息。

此外,您正在那里执行不必要的步骤。 It would be enough to use the df = pd.read_excel(...) function to load the Excel file into a pandas DataFrame.

def rowdrop():
    
    einlesen = os.getcwd()
    print('test einlesen: ' + einlesen)
    
    df = pd.read_excel('Individual Status.xls', sheet_name = 'Individual Status Raw Data')

然后你可以使用df.drop() function 删除你想要的行,然后用df.to_excel保存它

查看更多: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM