【发布时间】:2020-05-31 12:04:13
【问题描述】:
在 Python/Pandas 中,我正在尝试使用以下代码将数据帧的所有数字列标准化为每百万个计数:
import pandas as pd
def normalize(df):
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
numeric_cols = [col for col in df.columns if df[col].dtype in numerics]
sums = df.sum(axis=0, skipna = True)
for col in numeric_cols:
df.insert(df.columns.get_loc(col)+1, col+'_norm', ((df[col]/sums[col])*1000000)+1)
return df
dataset = pd.read_csv(csv_file, index_col=['Guide1', 'Guide2'], sep=',')
dataset = normalize(dataset)
这是一个简短的示例输入:
Guide1,Guide2,Gene1,Gene2,NHT1,NHT2,hart_essential_1,hart_essential_2,lib,RPE1_n1,RPE1_n2,RPE1_n3
Gene_1-KO-3,Non-Human-Target-150-KO-26,Gene_1,Non-Human-Target-150,False,True,False,False,12426.0,10634.0,8701.0,8084.0
Gene_2-KO-3,Non-Human-Target-150-KO-26,Gene_2,Non-Human-Target-150,False,True,False,False,12300.0,12383.0,6252.0,5388.0
Gene_1-KO-3,Gene_4-KO-2,Gene_1,Gene_4,False,False,False,False,11685.0,10006.0,10621.0,7002.0
Gene_1-KO-3,Gene_5-KO-2,Gene_1,Gene_5,False,False,False,False,11347.0,6726.0,3927.0,3943.0
Gene_1-KO-3,Gene_6-KO-1,Gene_1,Gene_6,False,False,False,False,11250.0,12469.0,3552.0,3334.0
代码按预期工作并规范化该数据帧的所有数字列,但它似乎工作得非常慢,其他规范化方法也是如此。我经常使用包含数百万行的数据框。对于大约 100 万行和只有 4 个数字列,在我的带有 Intel Core i7-6600U @ 2.6GHz 的移动计算机上标准化需要将近 10 分钟,尽管我预先计算了每一列的总和。 有没有办法加快速度,例如并行化或一些巧妙的 Pandas 技巧?
非常感谢任何帮助和/或指点!
【问题讨论】:
-
您想添加新的列还是用标准化值替换它们?
-
我想添加新列并保留原始数据。
-
你能给我们一个小样本输入吗?
-
@Horbaje 我添加了一个小示例输入,希望对您有所帮助。
标签: python pandas dataframe normalization