のために一度に複数の列の内容を置き換える:パンダは、次のように私がDFを持っている複数の条件
CHROM POS SRR4216489 SRR4216675 SRR4216480
0 1 127536 ./. ./. ./.
1 1 127573 ./. 0/1:0,5:5:0:112,1,10 ./.
2 1 135032 ./. 1/1:13,0:13:3240:0,30,361 0/0:13,0:13:3240:0,30,361
3 1 135208 ./. 0/0:5,0:5:3240:0,20,160 0/1:5,0:5:3240:0,20,160
4 1 138558 1/1:5,0:5:3240:0,29,177 0/0:0,5:5:0:112,1,10 ./.
私は特定の条件に応じて、サンプル列の内容を交換したいと思います。サンプル列は、SRR4216489、SRR4216675、SRR4216480です。私は './'を置き換えることを望んでいます。 0.5で始まり、0/0のものは0.0で、何も0/1や1/1で1.0です。私はそれがいくつかのプロセスに関係することを感謝します。そのほとんどは私が独立して行うことができますが、それらを結びつける構文はわかりません。例えば、私はサンプルSRR4216480のためにこれを行うことができます:
df['SRR4216675'][df.SRR4216675 == './.'] = 0.5
これがうまく機能し、courtesy of hereが、私は同時にサンプル列のすべてにそれを適用するかどうかはわかりません。私はでループを使用することを考えた:
sample_cols = df.columns[2:]
for s in sample_cols:
df[s][df.s =='./.'] = 0.5
が、これはまず非常にpandonicいないようだと、それはまた、とにかく「df.s」でのリストから文字列を受け付けません。
次の課題は、サンプル列の他の部分を埋める変数文字列を解析する方法です。私は、スプリット機能を使って試してみました:
df=df['SRR4216675'][df.SRR4216675.split(':') == '0/0' ] = 0.0
が、私は得る:
TypeError: 'float' object is not subscriptable
私はこの問題を解決する良い方法は、このようなthisとしてラムダを使用しますがパンダに新しいものであろうと確信しているとそのほとんどがのように見えますが、値を置き換えるためにさらに処理が必要であり、それが2列に持っているようにも見えますが、それ
col=df['SRR4216675'][df.SRR4216675.apply(lambda x: x.split(':')[0])]
:ラムダ私はそれは難しい見つけるよ、私はここに着いdは文句を言わない私は、既存のDFにそれを再統合してみましょう:
SRR4216675
./. NaN
0/1 NaN
1/1 NaN
0/0 NaN
0/0 NaN
df['SRR4216675'] = col
ValueError: cannot reindex from a duplicate axis
私は、これが1でいくつかの問題ですが、私はパンダに新しいですし、本当にそれでグリップを得るしたいことを理解します。私はこれらの問題をPythonsの標準リスト、繰り返し、文字列解析関数で基本リストとループを使って解決することができましたが、フルサイズのdfが何百万行にもなり、500個以上のサンプル列を含むので、
はパンダシリーズと 'pd.Series.replace()'メソッドへの様々な '.str'方法を調べてください。例: 'df.loc [:, 'SRR4216689'、 'SRR4216675'、 'SRR4216480']。replace(" ./。0.5、inplace = True) ' – Jakub