我的数据框架由DNA序列组成,每列包含3个碱基,代表密码子。我的目标是在给定的条件下,将任何包含某个字符串的密码子更新为间隙。示例条件,如果我的密码子列表中的任何终止密码子出现在小于某个百分比的列中,请将这些终止密码子编辑为间隙。你知道吗
示例df:
1 2 3 4 5 6 7 8 9 10 11 12
species1 TAG GAC AGG TTA CTA TGG TCA TAA TTC CTG CTG TAA
species2 GTG GAC AGG TTG CGG TGG TCA TGA TTG CTG CTC TAA
species3 TTG GAC AGG TTA CTA TGG TCA TGA TTG CTG CTG TGA
species4 ACC AGC AGG TTC CTG TGC TCA GTT TTG CTG CTG TGA
species5 ATG GAC GGG GTA GTA CGG TCA GTT TTG CTC CTG TAG
species6 ATG GAC GGG ATA GTA CGG TCA GTG TTG CTC CTG TAG
species7 ATG GAC GGG ATA GTA CGG TCA GTT TTG CTC CTG CTG
species8 ATG GAC AGG TTA CGG TGG TCA GTT TTG CTG CTG CTG
species9 TTG GAC AGG TTA CTC TGG TCA GTG TTG CTG CTG CTG
species10 CCC GAC TAA C-C GTG GGT TGA TGG TTG CTG CTG CTG
我的脚本首先跟踪具有<;40%停止的列:
codon = ["TAG", "TAA", "TGA"]
df_track = df.loc[:, (df.isin(codon).sum()/len(df) <= frac1) & (df.isin(codon).sum() > 0)]
print(df_track)
1 3 7 8
species1 TAG AGG TCA TAA
species2 GTG AGG TCA TGA
species3 TTG AGG TCA TGA
species4 ACC AGG TCA GTT
species5 ATG GGG TCA GTT
species6 ATG GGG TCA GTG
species7 ATG GGG TCA GTT
species8 ATG AGG TCA GTT
species9 TTG AGG TCA GTG
species10 CCC TAA TGA TGG
然后,在保持df_跟踪记录之后,我需要编辑那些出现在原始df中的站<;40%:
for col in df.columns:
if df.loc[:, (df.isin(codon).sum()/len(df) <= 0.4) & (df.isin(codon).sum() > 0)]:
df[df[col] == (cod for cod in codon), col] = "---"
print(df)
这会发出警告:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
编辑停止后我所期望的:
1 2 3 4 5 6 7 8 9 10 11 12
species1 --- GAC AGG TTA CTA TGG TCA --- TTC CTG CTG TAA
species2 GTG GAC AGG TTG CGG TGG TCA --- TTG CTG CTC TAA
species3 TTG GAC AGG TTA CTA TGG TCA --- TTG CTG CTG TGA
species4 ACC AGC AGG TTC CTG TGC TCA GTT TTG CTG CTG TGA
species5 ATG GAC GGG GTA GTA CGG TCA GTT TTG CTC CTG TAG
species6 ATG GAC GGG ATA GTA CGG TCA GTG TTG CTC CTG TAG
species7 ATG GAC GGG ATA GTA CGG TCA GTT TTG CTC CTG CTG
species8 ATG GAC AGG TTA CGG TGG TCA GTT TTG CTG CTG CTG
species9 TTG GAC AGG TTA CTC TGG TCA GTG TTG CTG CTG CTG
species10 CCC GAC --- C-C GTG GGT --- TGG TTG CTG CTG CTG
请注意,第12列不会被编辑或出现在df\u轨迹中,因为总的来说,停止出现在这个数据集中超过40%的物种中,因此对于这些情况,我会有一个单独的df跟踪器(基本上,如果停止超过跟踪整个列的百分比限制,然后删除)。你知道吗
似乎您正在用代码更改整行。 例如:
你会得到一个系列。然后,如果您使用这个序列来做数据帧索引,您将得到序列为真的所有行。你知道吗
如果你用列表索引,你会得到同样的结果。 简而言之,您可以使用Dataframe的“replace”方法。像这样:
相关问题 更多 >
编程相关推荐