如何用for循环将Excel各列保存为Python命名列表?
解决方案
不推荐直接创建以列名为名的变量
Python里变量名不能以数字开头(比如写1 = [1,2,3]会直接报语法错误),而且列数多的话,零散的变量根本不好管理。用字典存储是更规范、更实用的做法——字典的键对应列名,值对应处理后的列表,统一管理还方便调用。
修改后的代码
import pandas as pd # 原代码漏了导入pandas,记得加上 file_path = 'SpreadsheetFilePath.xlsx' # 注意:原columns列表里有重复的"6",我改成了"16",如果是笔误就保留,不是的话改回去 columns = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18"] all_data = pd.read_excel(file_path, sheet_name='Schedule') # 初始化一个字典,用来存所有列的处理后数据 column_data = {} for col_name in columns: # 读取列数据转列表,用pandas自带的方法过滤空值,比转字符串判断靠谱 cleaned_list = [x for x in all_data[col_name].tolist() if pd.notna(x)] # 把处理好的列表存入字典,键就是列名 column_data[col_name] = cleaned_list # 调用示例:想拿列"1"的数据直接这样写 print(column_data["1"])
代码说明
- 用
pd.notna(x)判断空值比str(x) != 'nan'更准确,能避免一些特殊值误判的情况 - 字典
column_data可以统一管理所有列的数据,后续想调用哪一列,直接用column_data["列名"]就能获取,不用找零散的变量 - 原代码里的
columns列表有重复项,建议检查一下是不是输入错误
非要创建变量?(不推荐)
如果硬要生成对应列名的变量,虽然不建议,但可以用globals()函数实现,但数字开头的列名还是会报错,而且会让你的变量环境变得很乱,新手容易搞混:
for col_name in columns: cleaned_list = [x for x in all_data[col_name].tolist() if pd.notna(x)] # 把列表绑定到全局变量,变量名等于列名 globals()[col_name] = cleaned_list # 但列名是数字的话,比如"1",调用时写print(1)会直接报错,因为变量名不能是数字
所以还是字典的方案最稳妥,既符合Python编码规范,也适合新手维护。
内容的提问来源于stack exchange,提问作者gclt22
相关产品推荐
相关产品推荐

