使用Python切片筛选Pandas DataFrame指定列的实现方法
关于筛选Pandas DataFrame中Luminosity列的实现问题
首先,你的代码是正确的,确实能精准提取出Luminosity列,并转换为适合后续建模的二维数组格式。
先梳理你的原代码逻辑
你创建的DataFrame结构如下:
import pandas as pd dataframe = pd.DataFrame({'Date': ['2017-04-01 00:24:17','2017-04-01 00:54:16','2017-04-01 01:24:17'] * 1000, 'Luminosity':[2,3,4] * 1000})
然后通过iloc[:,1]选中第二列(索引从0开始),用.values转换为NumPy数组,最后reshape(-1,1)把一维数组转为二维——这一步通常是为了适配scikit-learn等机器学习库的输入要求,整个流程完全没问题,能得到你需要的结果。
更简洁的优化方案
不过有几种更直观、紧凑的写法可以替代,供你参考:
- 链式调用一步完成提取与变形
不需要拆分两步,直接把操作连在一起,代码更简洁:
X = dataframe['Luminosity'].values.reshape(-1, 1)
效果和你的原代码完全一致,但可读性更强。
- 用双层方括号直接获取二维结构
如果使用[['Luminosity']](注意是双层方括号),会直接得到一个仅含目标列的DataFrame,转成数组后天然就是二维的,省去手动reshape的步骤:
X = dataframe[['Luminosity']].values
- 官方推荐的
to_numpy()替代.values
Pandas官方更建议用to_numpy()方法转换为NumPy数组,它的行为更明确,在处理混合数据类型的列时表现更稳定:
# 对应方案1的优化版 X = dataframe['Luminosity'].to_numpy().reshape(-1, 1) # 对应方案2的优化版 X = dataframe[['Luminosity']].to_numpy()
这些优化方案都能达到同样的目标,你可以根据自己的编码习惯选择最合适的写法。
内容的提问来源于stack exchange,提问作者bgarcial
相关产品推荐
相关产品推荐

