2017-12-25 7 views
1

私は、次のデータフレームがあります。変換値

  chr start_position  end_position gene_name 
0  Chr  Position     Ref Gene_Name 
1  chr22  24128945     G  nan 
2  chr19  45867080     G  ERCC2 
3  chr3  52436341     C  BAP1 
4  chr7  151875065     G  KMT2C 
5  chr19  1206633    CGGGT  STK11 

を、私は「START_POSITION」+ LENの値を含むように全体の「end_position」列に変換したいのですが( 'end_position')、その結果は次のようになります。

patient_vcf_to_df.apply(pd.to_numeric, errors='ignore') 
patient_vcf_to_df['end_position'] = patient_vcf_to_df['end_position'].map(lambda x: patient_vcf_to_df['start_position'] + len(x)) 

 chr start_position  end_position gene_name 
0  Chr  Position     Ref Gene_Name 
1  chr22  24128945   24128946  nan 
2  chr19  45867080   45867081  ERCC2 
3  chr3  52436341   52436342  BAP1 
4  chr7  151875065   151875066  KMT2C 
5  chr19  1206633    1206638  STK11 

私は以下のスクリプトを書かれています私はエラーが発生しました: TypeError:intではなくstrでなければなりません

問題を解決するにはどうすればよいですか?

ありがとうございます!

答えて

1

最初私は0行はヘッダ(カラム名)になるような方法であなたのCSVを読んだ:

df = pd.read_csv(filename, header=1) 

次DF取得する:陽性と

 Chr Position Ref Gene_Name 
0 chr22 24128945  G  NaN 
1 chr19 45867080  G  ERCC2 
2 chr3 52436341  C  BAP1 
3 chr7 151875065  G  KMT2C 
4 chr19 1206633 CGGGT  STK11 

を副作用:

In [99]: df.dtypes 
Out[99]: 
chr   object 
position  int64  # <--- NOTE 
ref   object 
gene_name object 
dtype: object 

あなたが列をケースに下げたい場合:

In [97]: df.columns = df.columns.str.lower() 

In [98]: df 
Out[98]: 
    chr position ref gene_name 
0 chr22 24128945  G  NaN 
1 chr19 45867080  G  ERCC2 
2 chr3 52436341  C  BAP1 
3 chr7 151875065  G  KMT2C 
4 chr19 1206633 CGGGT  STK11 

positionカラムが数値DTYPEであることを確認する。その後、

df['position'] = pd.to_numeric(df['position'], errors='coerce') 

と:

In [101]: df['end_position'] = df['position'] + df['ref'].str.len() 

In [102]: df 
Out[102]: 
    chr position ref gene_name end_position 
0 chr22 24128945  G  NaN  24128946 
1 chr19 45867080  G  ERCC2  45867081 
2 chr3 52436341  C  BAP1  52436342 
3 chr7 151875065  G  KMT2C  151875066 
4 chr19 1206633 CGGGT  STK11  1206638 
+0

私は 'TypeError例外取得しています理由:ufuncループが含まれていなかった '追加' dtype( ' pyd

+0

@pyd、おそらく' position'カラムには文字列( 'object')dtypeがあります... – MaxU

+0

yea、それを変換する方法 – pyd