Dataframe,数据框,按照含有指定列名的列表list来选择列数据

本文介绍了如何利用Pandas库在Python中筛选DataFrame的数据。通过将需要的列名存储在列表中,然后直接应用到DataFrame上,可以方便地选取特定列。文中详细展示了从CSV文件读取数据,创建列表,再到筛选列的步骤,适合数据处理初学者参考。

系列文章目录

标准化处理数据和panda读取excel数据,保存数据

Dataframe,数据框,按照指定列名列表list来选择列数据

前言

主要就是自己经常会忘,或者和loc,iloc混淆了,在处理数据时,又经常用到,所以记载一下。
将需要筛选的几列数据的列名汇总成一个list,然后通过list筛选Dataframe,非常简单。

一、pandas是什么?

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用list筛选df列数据解决方案

SNP = pd.read_csv('new.csv')#加载原始数据
#SNP,数据框

#加载列表名称,我所需要的列表名称
SNP_name_58 = pd.read_csv('161AD_NC_assoc_58snp.csv')
#SNP_name_58 维度:(50,1),数据框格式

#先转换为list,数据框SNP_name_58只有SNP这一列。
SNP_name_58_list = SNP_name_58['SNP'].tolist()
#注意此时,SNP_name_58_list = ('rs***','rs***','rs***',************)

#直接套上list,即可筛选,非常好用
SNP_58 =SNP[SNP_name_58_list]

总结

提示:这里对文章进行总结:
别再忘了。

<think>嗯,用户问的是为什么在Python中,当使用list()函数作用于Pandas的DataFrame时,返回的是列名列表而不是数据内容。我需要先回忆一下Pandas的基本结构。DataFrame是一个二维的数据结构,有行和有名称,行有索引。 首先,list()函数在Python中通常用于将可迭代对象转换为列表。比如,如果对一个字典使用list(),会得到键的列表。那DataFrame可能被设计成类似字典的结构,其中是键,所以当应用list(df)时,自然返回列名。这点需要验证一下。 用户提到的引用[1]里有例子,比如df.values.tolist()可以得到数据列表,而直接list(df)得到列名。这说明DataFrame在迭代时,默认迭代的是列名。这可能是因为DataFrame的__iter__方法被重写,返回列名的迭代器。所以当用list()包裹时,自然就是列名列表了。 另外,用户提供的引用[2]提到直接处理DataFrame可能更方便,不需要转成列表。这可能是因为DataFrame提供了丰富的方法来处理数据,如loc、iloc等,转换列表可能效率不高。但用户的问题是关于list()函数的行为,所以需要解释清楚背后的机制。 可能还需要对比其他转换方法,比如使用values属性或to_numpy(),这些方法会提取数据内容,再转为列表。而直接应用list()则是迭代列名,因为DataFrame的迭代行为是遍历。这点需要确认Pandas的文档说明。 总结下来,DataFrame对象在Python中被视为一个由组成的可迭代对象,每次迭代返回列名,因此list(df)得到列名列表。而获取数据内容需要使用特定的方法,如values.tolist()或to_numpy().tolist()。需要将这些解释清楚,并给出示例,帮助用户理解不同的转换方式及其适用场景。</think>在Python中,使用`list()`函数直接作用于Pandas的DataFrame时,其行为与DataFrame的底层设计密切相关。以下是具体原因和机制分析: --- ### 1. **DataFrame的迭代行为定义** Pandas的DataFrame默认将**列名(columns)**视为可迭代对象的主元素。当直接对DataFrame使用`list()`函数时,相当于隐式调用迭代器遍历DataFrame列名: ```python import pandas as pd df = pd.DataFrame({"A": [1,2], "B": [3,4]}) print(list(df)) # 输出: ['A', 'B'] ``` 这种行为类似于Python字典的迭代逻辑:字典默认迭代键(keys),而DataFrame列名类似于字典的键[^1][^4]。 --- ### 2. **底层实现机制** DataFrame的`__iter__()`方法被重写为返回列名的迭代器。这是Pandas的API设计选择,目的是让数据框的操作更符合直觉(例如通过列名访问数据)[^4]: ```python # 以下代码等效 for col in df: print(col) # 输出列名'A'和'B' ``` --- ### 3. **获取数据内容的正确方法** 如果需要将DataFrame的**数据值**转换为列表(而非列名),需通过以下方法实现: #### 方法1:使用`values.tolist()` ```python list_data = df.values.tolist() # 输出: [[1,3], [2,4]] ``` #### 方法2:使用`to_numpy().tolist()` ```python list_data = df.to_numpy().tolist() # 推荐Pandas 0.24+版本使用 ``` #### 方法3:列表解析逐行提取 ```python list_data = [list(row) for row in df.values] ``` 这些方法会提取数据框中的实际数值,而非元数据列名)[^1][^2]。 --- ### 4. **设计逻辑的合理性** Pandas将列名作为默认迭代目标,是因为: - **数据访问一致性**:通过列名直接操作数据(如`df["A"]`)是最常用操作; - **避免歧义**:DataFrame是二维结构,直接迭代数值可能导致行方向不明确[^3][^5]。 --- ### 对比不同转换方法的效果 | 方法 | 输出内容 | 适用场景 | |-------------------------|----------------------|------------------------| | `list(df)` | 列名列表(如`['A','B']`) | 快速获取列名 | | `df.values.tolist()` | 数值嵌套列表 | 需要原始数据的批量处理 | | `df.to_numpy().tolist()`| 同上,更规范的语法 | 新版本代码兼容性 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值