如果用pandas库可以做以下:(不知速度如何,可能有点笨,超过100万行可能会有点慢。高人可以优化一下算法)
import pandas as pd
import numpy as np
data= pd.DataFrame(np.random.randn(15, 5),columns=['a', 'b', 'c', 'd', 'e']) #随机产生15行5列的dataframe
print data #显示处理前数据
for e in list(data):#遍历所有列
big10 = np.sort(np.array(data[e].unique()))[len(data)-10] #找出每一列的第10大数
data.loc[data[e]<big10,e]=0 #小于这个的设为0
print data #显示处理后数据
结果:
处理前:
a b c d e
0 2.011566 -0.054574 0.089393 -2.248325 0.129237
1 0.562928 0.330970 0.010073 -0.920446 0.011367
2 -0.261404 0.847595 -0.998905 -1.161190 -0.944618
3 1.199322 1.418023 -0.334839 0.959855 1.300455
4 1.142549 0.293600 -1.462528 0.301034 -0.872144
5 -1.038400 -0.345969 -0.118284 -0.879187 -0.107377
6 -0.343097 0.422327 0.174909 -0.287656 1.530969
7 0.464041 -1.111023 0.879336 0.265647 -0.299637
8 -0.540274 -0.194963 -0.170589 -0.909901 1.359518
9 -0.754304 0.236669 0.214655 -0.538768 0.349819
10 -0.402359 0.818792 -0.689648 0.305897 -1.367814
11 -1.152727 0.719951 -0.943549 2.068480 0.664024
12 0.748543 1.340917 -0.473513 0.128526 -0.822395
13 1.801340 -0.021896 -0.050744 1.114119 0.516203
14 -0.415765 -2.561390 2.613543 0.427538 0.929893
处理后:
a b c d e
0 2.011566 0.000000 0.089393 0.000000 0.129237
1 0.562928 0.330970 0.010073 0.000000 0.011367
2 -0.261404 0.847595 0.000000 0.000000 0.000000
3 1.199322 1.418023 -0.334839 0.959855 1.300455
4 1.142549 0.293600 0.000000 0.301034 0.000000
5 0.000000 0.000000 -0.118284 0.000000 -0.107377
6 -0.343097 0.422327 0.174909 -0.287656 1.530969
7 0.464041 0.000000 0.879336 0.265647 0.000000
8 0.000000 0.000000 -0.170589 0.000000 1.359518
9 0.000000 0.236669 0.214655 -0.538768 0.349819
10 -0.402359 0.818792 0.000000 0.305897 0.000000
11 0.000000 0.719951 0.000000 2.068480 0.664024
12 0.748543 1.340917 0.000000 0.128526 0.000000
13 1.801340 -0.021896 -0.050744 1.114119 0.516203
14 0.000000 0.000000 2.613543 0.427538 0.929893
注:如果你的原始数据是csv等文件,可以data=pd.read_csv(“路径名+文件名.csv”)导入数据,用data.to_csv("路径名+新文件名.csv",index=False)导出 处理后的文件。
希望有所帮助!
|