Jupyter Notebook中R转Python遇NameError:hosp_info未定义求助
问题排查:Python中'hosp_info'未定义错误
我是Python新手,在Jupyter Notebook中将R代码转换为Python代码时,持续触发报错,提示NameError: name 'hosp_info' is not defined。以下是相关代码及报错信息,恳请协助排查解决:
原始R代码
# Get the unique hospital names hosp_names = hosp_info %>% filter(`Hospital Type` == "Acute Care Hospitals") %>% filter(State == "CA") %>% pull(`Hospital Name`) # Filter based on those hospital names hosp_info_CA = hosp_info %>% rename(Hospital = `Hospital Name`, Provider_ID = `Provider ID`, Safety = `Safety of care national comparison`, Effectiveness = `Effectiveness of care national comparison` ) %>% filter(Hospital %in% hosp_names, State == "CA") %>% mutate(Overall_Rating = as.numeric(`Hospital overall rating`)) %>% drop_na(Overall_Rating) hosp_info_CA %>% arrange(desc(Overall_Rating), Hospital) %>% head(7) hosp_info_CA %>% group_by(Overall_Rating, Safety) %>% count() write_csv(hosp_info_CA, 'hosp_info_CA.csv')
我编写的Python代码
import pandas as pd #import panda hosp_names = hosp_info hosp_info = [(hosp_info[" Hospital Type "] == " Acute Care Hospitals ") & (hosp_info[" State "] == " CA ")].loc[:,[" Hospital Name "]].unique() hosp_info_CA = hosp_info.rename(columns={" Hospital Name ": " Hospital ", " Provider ID ": " Provider_ID ", " Safety of care national comparison ": " Safety ", " Effectiveness of care national comparison ": " Effectiveness "}).loc[hosp_info[" Hospital "].isin(hosp_names) & (hosp_info[" State "] == " CA ")].dropna(subset=[" Hospital overall rating "]).assign(Overall_Rating = lambda x: pd.to_numeric(x[" Hospital overall rating "])) hosp_info_CA.sort_values(by=" Overall_Rating ", ascending=False).head(7) hosp_info_CA.groupby([" Overall_Rating ", " Safety "]).count() hosp_info_CA.to_csv(" hosp_info_CA.csv ")
报错信息
NameError Traceback (most recent call last) in 3 4 # Get the unique hospital names ----> 5 hosp_names = hosp_info 6 hosp_info = [(hosp_info[" Hospital Type "] == " Acute Care Hospitals ") & (hosp_info[" State "] == " CA ")].loc[:,[" Hospital Name "]].unique() 7 NameError: name 'hosp_info' is not defined
问题根源及修正方案
1. 核心错误:未加载原始数据
R代码默认hosp_info已经是读入内存的数据框,但Python里你完全没写读取数据的代码。必须先把你的医院数据文件(比如CSV/Excel)读入成DataFrame,比如:
# 替换成你的实际文件路径 hosp_info = pd.read_csv("your_hospital_data.csv")
2. 代码逻辑错误修正
- 删掉第一行无意义的
hosp_names = hosp_info,这行不仅没用,还直接触发未定义错误。 - 筛选
hosp_names的写法错误:不能把条件放在列表里,要直接对DataFrame做筛选后提取列。 - 列名空格问题:如果原始数据列名确实带前后空格,建议先清理列名,避免后续出错;如果是你手动加的空格,要去掉。
- 拆分链式调用,避免一行代码太复杂,方便调试。
修正后的完整Python代码
import pandas as pd # 第一步:读取原始数据(替换为你的实际文件路径) hosp_info = pd.read_csv("your_hospital_data.csv") # 清理列名(可选,但推荐:去掉列名前后空格) hosp_info.columns = hosp_info.columns.str.strip() # 获取加州急性护理医院的唯一名称 hosp_names = hosp_info[(hosp_info["Hospital Type"] == "Acute Care Hospitals") & (hosp_info["State"] == "CA")]["Hospital Name"].unique() # 处理得到hosp_info_CA hosp_info_CA = (hosp_info .rename(columns={ "Hospital Name": "Hospital", "Provider ID": "Provider_ID", "Safety of care national comparison": "Safety", "Effectiveness of care national comparison": "Effectiveness" }) .loc[(hosp_info["Hospital Name"].isin(hosp_names)) & (hosp_info["State"] == "CA")] .assign(Overall_Rating=lambda x: pd.to_numeric(x["Hospital overall rating"], errors="coerce")) .dropna(subset=["Overall_Rating"]) ) # 查看Top7高评分医院 print(hosp_info_CA.sort_values(by="Overall_Rating", ascending=False).head(7)) # 按评分和安全等级分组计数 print(hosp_info_CA.groupby(["Overall_Rating", "Safety"]).size()) # 保存结果 hosp_info_CA.to_csv("hosp_info_CA.csv", index=False)
内容的提问来源于stack exchange,提问作者ex_lvl_99_warlock
相关产品推荐
相关产品推荐

