我是编程新手,并且已经开始学习python,试图让我在研究中运行的一些任务更有效率。我正在pandas模块中运行PCA(我在网上找到了一个教程)并且有了这个脚本,但是需要在pca之前选择部分数据帧。
到目前为止我(例如实际上我正在阅读带有更大矩阵的.csv文件)
x = np.random.randint(30, size=(8,8))
df = pd.DataFrame(x)
0 1 2 3 4 5 6 7
0 9 0 23 13 2 5 14 6
1 20 17 11 10 25 23 20 23
2 15 14 22 25 11 15 5 15
3 9 27 15 27 7 15 17 23
4 12 6 11 13 27 11 26 20
5 27 13 5 16 5 5 2 18
6 3 18 22 0 7 10 11 11
7 25 18 10 11 29 29 1 25
我想要做的是在任何行中子选择满足特定条件的列,特别是我希望每列至少有一个数字=&gt; 27(仅作为例如)生成新的数据帧< / p>
0 1 3 4 5
0 9 0 13 2 5
1 20 17 10 25 23
2 15 14 25 11 15
3 9 27 27 7 15
4 12 6 13 27 11
5 27 13 16 5 5
6 3 18 0 7 10
7 25 18 11 29 29
我已经研究过pandas中的各种切片方法,但似乎没有做我想要的(.loc和.iloc等)。
到目前为止我用来阅读的实际脚本是
filename = 'Data.csv'
data = pd.read_csv(filename,sep = ',')
x = data.ix[:,1:] # variables - species
y = data.ix[:,0] # cases - age
所以x的子数据框就是我所追求的(如上所述)。
非常感谢任何建议。
答案 0 :(得分:1)
loc
,iloc
和ix
等索引器接受布尔数组。例如,如果您有三列,df.loc[:, [True, False, True]]
将返回所有行以及列0和2(当对应值为True时)。您可以(df>=27).any()
检查列中的任何元素是否大于或等于27。对于至少有一个值> = 27的列,这将返回True。因此,您可以使用以下内容对数据框进行切片:
df.loc[:, (df>=27).any()]
Out[34]:
0 1 3 4 5 7
0 8 2 28 9 14 21
1 24 26 23 17 0 0
2 3 24 7 15 4 28
3 29 17 12 7 7 6
4 5 3 10 24 29 14
5 23 21 0 16 23 13
6 22 10 27 1 7 24
7 9 27 2 27 17 12
这是最初的数据框:
df
Out[35]:
0 1 2 3 4 5 6 7
0 8 2 7 28 9 14 26 21
1 24 26 15 23 17 0 21 0
2 3 24 26 7 15 4 7 28
3 29 17 9 12 7 7 0 6
4 5 3 13 10 24 29 22 14
5 23 21 26 0 16 23 17 13
6 22 10 19 27 1 7 9 24
7 9 27 26 2 27 17 8 12