Pandas: df (dataframe) 未定义
Pandas: df (dataframe) is not defined
我正在尝试从 xlsx
文件加载和编辑数据框。该文件位于我在变量 einlesen
中定义的路径中。修复错误后,我想删除一行并将新数据框保存在特定路径的新 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
函数中定义了 df
;函数内部定义的变量只能在函数内部访问,除非你做一些改变。
将您的函数更改为 return 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
并将函数调用的 returned 值分配给变量:
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)
使用上述方法,您不需要将函数调用分配给变量,但请不要使用该方法,参见Why are global variables evil?
您应该 return 函数中的数据框 rowdrop
。
我想指出,您的函数名称可能不是最相关的,因为它还创建并 returns 一个数据框。
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
是因为你从函数 rowdrop()
外部引用变量 df
。您应该在该函数中调用此 df.to_excel(save_dir, index = False)
。
我建议您在 Google 上搜索“Python 中的变量范围”以查找更多信息。
此外,您在此处执行了不必要的步骤。使用 df = pd.read_excel(...) 函数将 Excel 文件加载到 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()
函数删除您想要的行,然后使用 df.to_excel
保存它
查看更多:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html
我正在尝试从 xlsx
文件加载和编辑数据框。该文件位于我在变量 einlesen
中定义的路径中。修复错误后,我想删除一行并将新数据框保存在特定路径的新 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
函数中定义了 df
;函数内部定义的变量只能在函数内部访问,除非你做一些改变。
将您的函数更改为 return 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
并将函数调用的 returned 值分配给变量:
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)
使用上述方法,您不需要将函数调用分配给变量,但请不要使用该方法,参见Why are global variables evil?
您应该 return 函数中的数据框 rowdrop
。
我想指出,您的函数名称可能不是最相关的,因为它还创建并 returns 一个数据框。
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
是因为你从函数 rowdrop()
外部引用变量 df
。您应该在该函数中调用此 df.to_excel(save_dir, index = False)
。
我建议您在 Google 上搜索“Python 中的变量范围”以查找更多信息。
此外,您在此处执行了不必要的步骤。使用 df = pd.read_excel(...) 函数将 Excel 文件加载到 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()
函数删除您想要的行,然后使用 df.to_excel
查看更多:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html