循环提取动态命名的dataframe中的某一列:解决SyntaxError: cannot assign to operator 和 如何运用list集成dataframe并提取行列

本文介绍如何使用Python的pandas库批量处理47个CSV气象数据文件,通过for循环动态命名变量并提取每张表的第5列。通过locals()函数解决了变量命名问题,同时展示了将dataframe添加到list中以便于后续操作。这种方法适用于需要对多个数据集进行类似处理的场景。
部署运行你感兴趣的模型镜像

一、问题描述

我有47个csv气象数据文件,格式相同,我需要提取每个表的第5列,即如图“combination”列,利用for循环批量如何进行呢?

二、思路&代码

#导包
import pandas as pd

#a列表将集合了47个csv文件的dataframe,可以用a[i]的思路来提取任意dataframe
a=[] 

for i in range(0,47): 
    path = "填入你的路径"+ str(file_list[i])+"_TEM.csv" #file_list是站点序号集合的list
    
    locals()["dataframe_"+ str(file_list[i])]=pd.read_csv(path,encoding='gbk')#locals()循环给每个dataframe创建动态变量名称,格式即"dataframe_对应的站点序号"
    
    a.append(locals()["dataframe_"+ str(file_list[i])])#逐个添加每个dataframe
    
    locals()["datelist_5_"+ str(file_list[i])] = a[i].iloc[:, 4]#等号左侧同样是动态命名变量,等号右侧获取每个dataframe的第5列,并命名为"datalist_5_对应的站点序号"的格式

#print(dataframe_56376)#测试dataframe数据动态变量是否命名成功,并可以成功提取
print(a[46])

#提取第五列
print(datelist_5_56376)#测试第5列数据动态变量是否命名成功,并可以成功提取

 结果:

 成功!

三、收获

①用local()函数动态命名

原因是等式左侧的变量命名时不能添加运算符,否则会报错为SyntaxError: cannot assign to operator。

②使用创建list的思想

从前都是append简单的对象,比如一个变量、一个数字等;本次操作将dataframe作为list的组成部分,按序号可以轻松提前对应元素。

谢谢阅读~

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在使用 `pandas` 处理数据时,经常需要从 `DataFrame` 中提取一列进行分析或处理。提取一列非常简单,可以通过以下几种方式实现。 --- ### ✅ 方法一:使用方括号 `[]` 提取列 这是最常用的方式,直接通过列名提取: ```python import pandas as pd # 创建一个示例 DataFrame data = { 'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'city': ['New York', 'Los Angeles', 'Chicago'] } df = pd.DataFrame(data) # 提取 'age' 列 age_column = df['age'] print(age_column) ``` **输出结果:** ``` 0 25 1 30 2 35 Name: age, dtype: int64 ``` > 注意:这种方式返回的是一个 `pandas.Series` 对象。 --- ### ✅ 方法二:使用点号 `.` 提取列(仅适用于合法变量名的列名) 如果列名是一个合法的 Python 变量名(如不以数字开头、不含空格等),可以使用点号语法: ```python age_column = df.age print(age_column) ``` > ⚠️ 不推荐用于含有特殊字符的列名,例如 `'birth date'` 或 `'1st_place'`。 --- ### ✅ 方法三:提取列为 NumPy 数组(适合后续计算) 如果你希望将列转换为 `numpy.ndarray` 类型以便于数学运算: ```python age_array = df['age'].values print(age_array) # 输出: array([25, 30, 35]) ``` --- ### ✅ 方法四:提取保持为 DataFrame(保留二维结构) 如果你想保持提取后的对象仍然是一个 `DataFrame` 而不是 `Series`,可以使用双层中括号: ```python age_df = df[['age']] print(age_df) ``` **输出结果:** ``` age 0 25 1 30 2 35 ``` --- ### 🔍 解释说明: - `df['column_name']`: 最通用的方法,适用于所有列名。 - `df.column_name`: 简洁但有限制,只能用于合法命名的列。 - `.values`: 将列转换为 NumPy 数组,便于数值计算。 - `[[]]`: 保留为 `DataFrame`,适合批量操作或作为模型输入。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值