.values是否可以改.iloc
【摘要】 结论先说:不建议去掉.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. 关键坑点区分
- numpy数组 ndarray 支持
arr[行切片,列切片] - Pandas DataFrame 不支持
df[行切片,列切片]df[]只用来选列,不能同时写行、列两个维度!
4. 最简总结
raw_df.values→ 转为numpy数组,才能直接写[::2, :];- 去掉.values,必须改用
.iloc[]索引,不能直接raw_df[::2,:]; - 这行代码标准写法保留
.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)