.values是否可以改.iloc

举报
人工智能-张晨光 发表于 2026/07/28 15:29:23 2026/07/28
【摘要】 结论先说:不建议去掉.values,去掉大概率报错,即使偶尔能运行也暗藏风险#原代码X= np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])raw_df 是 Pandas DataFrame1. 如果删掉.values,写成下面这样:X= np.hstack([raw_df[::2, :], raw_df[1::2, :2]...

结论先说:不建议去掉.values,去掉大概率报错,即使偶尔能运行也暗藏风险

#原代码
X= np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])

raw_df 是 Pandas DataFrame

1. 如果删掉.values,写成下面这样:

X= np.hstack([raw_df[::2, :], raw_df[1::2, :2]])

❌ 直接报错! DataFrame 不支持 [行切片,列切片] 这种二维索引写法 Pandas只能用 .loc / .iloc 实现行列同时筛选。

# DataFrame正确行列切片写法(不用values)
raw_df.iloc[::2, :]
raw_df.iloc[1::2, :2]

2. 两种可行方案对比

方案A(你当前写法,推荐)

# DataFrame转numpy数组,numpy原生切片语法,简洁
X= np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])

方案B(不使用.values,使用iloc)

part1 = raw_df.iloc[::2, :]
part2 = raw_df.iloc[1::2, :2]
X = np.hstack([part1, part2])

原理:np.hstack会自动把DataFrame转为数组,但是代码更长。

3. 关键坑点区分

  1. numpy数组 ndarray 支持 arr[行切片,列切片]
  2. Pandas DataFrame 不支持 df[行切片,列切片] df[] 只用来选列,不能同时写行、列两个维度!

4. 最简总结

  1. raw_df.values → 转为numpy数组,才能直接写 [::2, :];
  2. 去掉.values,必须改用 .iloc[] 索引,不能直接 raw_df[::2,:];
  3. 这行代码标准写法保留 .values,简洁、机器学习场景通用。

补充拓展演示

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20).reshape(10,2))

# 报错写法!无values
# df[::2,:]

# 正确1:转数组切片(你的代码风格)
print(df.values[::2,:])

# 正确2:iloc切片
print(df.iloc[::2,:])
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。