不使用循环,如何对numpy array或者list中每个元素进行操作

在使用list或者numpy array时,经常需要对里面的每一个元素进行操作。当然使用for循环是最简单的,但for循环速度非常慢。在网上找了很久没有合适的,后来想到pandas包中的apply()函数,pandas包内置numpy array科学计算模块,速度大大高于for循环。

如我有个list 需要对里面的元素去除文件夹名字“chrom_kmer/”

>>> import numpy as np
>>> import pandas as pd
>>> idname
['chrom_kmer/1765.179.con.10_1mer', 'chrom_kmer/1765.179.con.10_12001mer', 'chrom_kmer/1765.179.con.10_18001mer', 'chrom_kmer/1765.179.con.10_24001mer', 'chrom_kmer/1765.179.con.10_30001mer', 'chrom_kmer/1765.179.con.10_36001mer', 'chrom_kmer/1765.179.con.10_42001mer', 'chrom_kmer/1765.179.con.10_48001mer', 'chrom_kmer/1765.179.con.105_1mer', 'chrom_kmer/1765.179.con.105_102001mer']

1. 最简单的方法是列表表达式,同for循环类似

最简单的是字符串切片,从第12个位置取:

>>> id_clear=[i[12:] for i in idname]
>>> id_clear
['765.179.con.10_1mer', '765.179.con.10_12001mer', '765.179.con.10_18001mer', '765.179.con.10_24001mer', '765.179.con.10_30001mer', '765.179.con.10_36001mer', '765.179.con.10_42001mer', '765.179.con.10_48001mer', '765.179.con.105_1mer', '765.179.con.105_102001mer']

这种类似for循环的方法太慢,可以使用numpy加pandas的apply函数,对里面元素进行操作,速度更快

2. 使用pd.apply()函数

>>> id_series=pd.Series(idname) # 将list或者numpy array转化为pandas的Series,如果是多维数组,改用pd.DataFrame()
>>> id_clear2=id_series.apply(lambda x:x[12:]) # 使用pandas.appy()函数
>>>id_clear2 # 得到的是numpy array
0          765.179.con.10_1mer
1      765.179.con.10_12001mer
2      765.179.con.10_18001mer
3      765.179.con.10_24001mer
4      765.179.con.10_30001mer
5      765.179.con.10_36001mer
6      765.179.con.10_42001mer
7      765.179.con.10_48001mer
8         765.179.con.105_1mer
9    765.179.con.105_102001mer
dtype: object
# 如果想转化为list,直接用numpy.tolist()函数
>>> id_clear2 = id_clear2.tolist()
>>> id_clear2
['765.179.con.10_1mer', '765.179.con.10_12001mer', '765.179.con.10_18001mer', '765.179.con.10_24001mer', '765.179.con.10_30001mer', '765.179.con.10_36001mer', '765.179.con.10_42001mer', '765.179.con.10_48001mer', '765.179.con.105_1mer', '765.179.con.105_102001mer']

大功告成,如果是多维array,可用pd.DataFrame()转化成pandas格式,采用apply()或者applymap()函数来操作。

猜你喜欢

转载自blog.csdn.net/weixin_44022515/article/details/105168854