2016-05-01 9 views
2

私はPythonに読みたい2つのtxtファイルを持っています:1)地図ファイル、2)データファイル。ルックアップテーブルや辞書に2つの列の値を読み込み、pandas.map関数のようなものを使って3番目の列に入れる値を決定します。実際のマップファイルは〜70万行、実データファイルは〜1000万行です。私はいくつか見つかっpython pandas - 参照として2列を使用したマップ

Chr  Position Name 
1  1000  SNPA 
1  2000  SNPB 
2  1000  SNPC 
2  2001  NaN 

:データは、最終的なテーブルを結果の

Chr  Position 
1  1000 
1  2000 
2  1000 
2  2001 

ファイル -

玩具DATAFRAME(または私は辞書として再作成することができ) - 地図

Chr  Position Name 
1  1000  SNPA 
1  2000  SNPB 
2  1000  SNPC 
2  2000  SNPD 

玩具DATAFRAME 1つの列ルックアップ:Adding a new pandas column with mapped value from a dictionaryでこれに関する質問。しかし、2つの列を使用する方法を見つけることができないようです。私はゲノムデータを扱うことができる他のパッケージにもオープンしています。

ボーナスの第2の質問の場合、マッピングされた値がある程度あれば、3番目の列をマッピングする方法があればいいでしょう。言い換えれば、上の表の4行目はSNPDにマップされます。しかし、私はちょうど上記の解決策を得ることを嬉しく思う。

答えて

3

私はそれをこのようにします:最初の2つのカラムがインデックスになりますように

があなたの地図データを読み込む

:あなたは区切り文字として ,を持っている場合 sep=','

dfm = pd.read_csv('/path/to/map.csv', delim_whitespace=True, index_col=[0,1]) 

変更delim_whitespace=True

あなたのDFを読み上げる(同じインデックスを設定する):

df = pd.read_csv('/path/to/data.csv', delim_whitespace=True, index_col=[0,1]) 

はあなたのDFに参加:

df.join(dfm) 

出力:

In [147]: df.join(dfm) 
Out[147]: 
       Name 
Chr Position 
1 1000  SNPA 
    2000  SNPB 
2 1000  SNPC 
    2001  NaN 

PSボーナスの質問のための私のDFSは異なる列名を持っている場合、私はこれをどのように行うことができますthis

+0

のようなものを試してみてください?私はちょうどPythonとpandasで始めます(私は通常Rで働いています)。列の名前を変更するのですか、それとも別の方法ですか? –

+0

@GaiusAugustusには、参加のために使用される3つの機能があります: 'join'、' merge'、 'concat' - read [docs](http://pandas.pydata.org/pandas-docs/stable/ merging.html)、それはあなたが良いスタートを持つのに役立ちます – MaxU

関連する問題