2017-05-14 18 views
0

私はcsvファイルにsome、foo、barと私は別のリストを持っています。すべてのリストで可能ですが、同じcsvファイルに行を作成し、 'key'が存在する場合は1を、それ以外の場合は0を設定します。この場合、csvファイルの結果は次のようになります。リストにcsvファイルの要素が含まれていないか確認してください。

some,foo,bar 
1,0,1 
+1

はい、可能です。ほとんどのものがあります。この問題を解決するために書いたコードはありますか? –

+0

申し訳ありませんが、私は何も知らない@PaulCollingwood – Daniele

答えて

0

キーを列名として作成できます。

csv = { 
    "some" : [], 
    "foo" : [], 
    "bar" : [] 
} 

ここで、各リストについて、値が辞書のキーにあるかどうかをチェックし、必要に応じて追加します。

for list in lists: 
    for key in csv.keys(): 
    if key in list: 
     csv[key].append(1) 
    else: 
     csv[key].append(0) 
+0

このコードでは、要素の順序は保証されていますか? 1と0は同じキー列にありますか? – Daniele

+0

はい、すべてのキーに対して3つのリストすべてに挿入するので、1つの行のすべての値は3つのリストすべてで同じインデックスになります。 – squgeim

1

パンダを使用したアプローチが1つあります。
のはexample.csvのコンテキストを言ってみましょうは、次のとおりです。

some,foo,bar 

はその後、我々はしてサンプルデータを表すことができます。

import pandas as pd 

keys = ["att1","some","bar","try","other"] 
data = pd.read_csv('~/Desktop/example.csv', header=None) 

print(data) 
     0 1 2 
0 some foo bar 

matches = data.apply(lambda x: x.isin(keys).astype(int)) 

print(matches) 
    0 1 2 
0 1 0 1 

newdata = pd.concat([data, matches]) 

print(newdata) 
     0 1 2 
0 some foo bar 
0  1 0 1 

今すぐ戻ってCSVへの書き込み:

datakeys考える
newdata.to_csv('example.csv', index=False, header=False) 

# example.csv contents 
some,foo,bar 
1,0,1 

、すべてを1つの連鎖コマンドに集約することができます。

(pd.concat([data, 
      data.apply(lambda x: x.isin(keys).astype(int)) 
      ]) 
    .to_csv('example1.csv', index=False, header=False)) 
関連する問題