python - 使用 2 个 while 循环删除相关 DataFrame 中的行(python)
问题描述
编辑,我现在提供了一个基本数据框来复制/粘贴(这是我的第一篇文章,我正在学习如何继续!)
import pandas as pd
import numpy as np
import random
random.seed(10)
randomlist_list =[]
for i in range(10):
randomlist = []
for j in range(10):
n = random.randint(1,30)
randomlist.append(n)
randomlist_list.append(randomlist)
df_ml= pd.DataFrame(randomlist_list , columns=['Y', 'A', 'B', 'C', 'D','E','F', 'G','H','I'])
df_ml_corr = df_ml.corr()
我目前有一个相关数据框,我希望在 2 个输入列(即:“A”、“F”)比输入与输出变量(即:“A”、“Y”)更相关时删除列和行)。
这是我当前的代码(将应用于更大的矩阵):
corr_columns = df_ml_corr.columns
loopcount = df_ml.corr().columns.shape[0]
i = 1
#while statement i column index
while i < loopcount:
j=1
#for loop j row index
while j < loopcount:
if i==j:
j+=1
elif abs(df_ml_corr.iloc[j,i]) > abs(df_ml_corr.iloc[0,i]):
df_ml_corr.drop(df_ml_corr.columns[j], axis='index', inplace=True)
df_ml_corr.drop(df_ml_corr.columns[j], axis=1, inplace=True)
corr_columns = df_ml_corr.columns
loopcount = df_ml.corr().columns.shape[0]
else:
j+=1
i+=1
我还添加了一个 if 语句以避免删除与自身相关的行 i=j (=1),并且如果我删除任何行,则不将 1 添加到 j。
在这个阶段,错误弹出如下:
---> elif abs(df_ml_corr.iloc[j,i]) > abs(df_ml_corr.iloc[0,i]): IndexError: single positional indexer is strong text out-of-bounds
关于我做错了什么的任何见解?
解决方案
感谢您的见解!代码运行得更好,但我发现了一些剩余的错误(我目前正在尝试修复它们,如果您有任何其他想法,那很好)
使用示例数据框,代码应该:
- 第 1 步:越过 A 列 => 删除 F 列
- 第 2 步:越过 B 列 => 删除 C、D、H、I 列
- 第 3 步:越过 E 列 => 通过
- 第 4 步:越过 G 列 => 通过
但是,过时的代码有两个缺陷:
- 新的 elif 块没有考虑到它删除了一行的事实,因此 df_ml_corr.iloc[j,i] 实际上是指之前的行(这就是我没有实现 j+=1 的原因)
- 因为它跳过了一些行,所以代码有时会删除以前的列(当它发生时,它会前进到下一列而不完全处理该列的其余部分)
在示例中,更新后的代码执行以下操作:
- 第 1 步:i=1 (A), j=6 => 丢弃 F (loopcount-1 = 8)
- 第 2 步:i=2 (B), j=3 => 删除 C (loopcount-1 = 7) 并忽略现在位于 j=3 的 D 列
- 第 3 步:i=2 (B), j=6 => 删除 H (loopcount-1 = 6) 并忽略现在位于 j=6 的列 I(无论如何都达到了 loopcount-1)
- 第 4 步:i=3 (D), j=2 => Drop B (loopcount-1 = 5) 因此 i=3 现在循环到不同的列
- 第 5 步:i=3 (E),不再发生任何事情
- 第 6 步: i=4 (G), j=1 => Drop A ,因此 i=4 现在正在循环下一列
- 第 7 步:i=4 (I), j=2 => 删除 E
为了修复它,我尝试使用 j-=1 更改 elif 块以再次向后循环(它应该落入 if 或 else 块中,直到所有内容都被清理)但没有任何成功。
推荐阅读
- r - 完成创建R函数后;通过使用此函数和小插图中的样本值来证明更正。错误说“未使用的参数(...)”
- c++ - 安装 FLTK 库时配置错误
- python - 根据 Pandas 中的 id 将列值从一个数据帧复制到另一个数据帧
- asp.net-core - 在 .net 核心中强制 http 到 https:未调用 Api 控制器方法
- amazon-rds - 从 AWS CLI 创建数据库而不提供密码
- php - 无论如何要在没有服务的情况下启动 docker 容器吗?
- apache-kafka - Sarama ClusterAdmin 连接问题 - 管道损坏
- hibernate - QueryDsl Embedded 未映射
- reactjs - Gatsby 使用 GH-Pages 部署并且 --Path-Pefix 已损坏
- python - “ExtraTreesClassifier”对象没有属性“estimators_”错误