2017-10-03 27 views
1

Ncbi BLASTレポートを解析するスクリプトを作成しようとしています。このエラーの原因となっている列は、ゲノムGI番号です。Blast parsing:AttributeError: 'float'オブジェクトに 'split'属性がありません

など。 LT697097.1

最後に小数点があります。これを分割してGI番号を取得しようとすると、このエラーが発生します。

Django AttributeError 'float' object has no attribute 'split'このエラーは、splitはfloat値であるとみなしているためです。

したがって、Pandas reading csv as string typeのアドバイスを使用して、pandas列を文字列としてインポートしました。

レポートには自動的に列名がないため、列番号を使用しています。

import pandas as pd  
df = pd.read_csv("out.txt", sep="\t", dtype=object, names = ['query id','subject ids','query acc.ver','subject acc.ver','% identity','alignment length', 'mismatches','gap opens','q.start','q.end','s.start','s.end','evalue','bit score']) 

sacc = df['subject acc.ver'] 
sacc = [i.split('.',1)[0] for i in sacc] 

私はまだAttributeErrorエラーを受け取ります: 'float'オブジェクトには属性 'split'がありません。

次に、Convert Columns to String in Pandasのように、astype(str)を試しました。

これは列の読み取りに失敗し、出力値として列名属性のみを持ちます。

あなたは私のアプローチで間違っているところでアドバイスをしていただけますか?

答えて

0

私はあなたがNaNと非常に良いと働いて最初のリストを選択してstr.splitを必要と思うと思います。もう一つの問題は、.せずにいくつかの値でなければなりません:

df['subject acc.ver'] = df['subject acc.ver'].str.split('.',1).str[0] 

サンプル:

df = pd.DataFrame({'subject acc.ver':['LT697097.1',np.nan,None, 'LT6']}) 

df['subject acc.ver'] = df['subject acc.ver'].str.split('.',1).str[0] 
print (df) 
    subject acc.ver 
0  LT697097 
1    NaN 
2   None 
3    LT6 
関連する問題