pandasで各行の最終列を参照する効率的な方法ってなんだろう

How to change just one column in a txt file leaving all else the same and respecting the whitespaces? – StackOverflow

strings = """| Martini system from 2b97.pdb                 |
| 55601                                        |
|     1ALA     BB    1  13.904   5.512   1.259 |
|    12VAL     BB   12   4.199  35.292  21.353 |
|   112VAL    SCC  113   4.367   5.234  21.445 |
|  1113CYS     BB 1114   4.041   4.969  21.220 |
| 11113CYS    SCC11115   4.088  14.816  21.041 |
| 19293DEC      C55598  19.018   0.828   7.094 |
|   9.05570   9.05570  30.02670                |""".replace('|', '')

print(strings)
print('\n')

for i, line in enumerate(strings.splitlines()):
  if i < 2:
    print(line)
  else:
    x = line.split()
    s = "\t".join(x[:-1])
    print(f' {s}\t{float(x[-1])+0.1:.3f}')
Martini system from 2b97.pdb                 
 55601                                        
     1ALA     BB    1  13.904   5.512   1.259 
    12VAL     BB   12   4.199  35.292  21.353 
   112VAL    SCC  113   4.367   5.234  21.445 
  1113CYS     BB 1114   4.041   4.969  21.220 
 11113CYS    SCC11115   4.088  14.816  21.041 
 19293DEC      C55598  19.018   0.828   7.094 
   9.05570   9.05570  30.02670                


 Martini system from 2b97.pdb                 
 55601                                        
 1ALA   BB  1   13.904  5.512   1.359
 12VAL  BB  12  4.199   35.292  21.453
 112VAL SCC 113 4.367   5.234   21.545
 1113CYS    BB  1114    4.041   4.969   21.320
 11113CYS   SCC11115    4.088   14.816  21.141
 19293DEC   C55598  19.018  0.828   7.194
 9.05570    9.05570 30.127

という処理をPandasで考えたい.

ぱっと思いつくのは,ループを回してiatアクセサを用いる方法.

import io
import pandas as pd


df = pd.read_csv(io.StringIO(strings), sep='\s+', header=None, skiprows=2)
idx = df.isna().idxmax(1) - 1
for r, c in enumerate(idx):
  df.iat[r, c] += 0.1
df
    0   1   2   3   4   5
0   1ALA    BB  1.0000  13.904  5.512   1.359
1   12VAL   BB  12.0000 4.199   35.292  21.453
2   112VAL  SCC 113.0000    4.367   5.234   21.545
3   1113CYS BB  1114.0000   4.041   4.969   21.320
4   11113CYS    SCC11115    4.0880  14.816  21.141  NaN
5   19293DEC    C55598  19.0180 0.828   7.194   NaN
6   9.05570 9.05570 30.1267 NaN NaN NaN

リーズナブルなのは間違いないけど,もっと良い方法は無いのかな.

カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください