2016-12-29 6 views
3

私は、これらの列名定義されたマスクが真のときに特定の列の値を変更する方法は?

  • 'team1'、
  • 'team2'、
  • '都市'、
  • '日付' を持っているデータフレームを持っています。

私がしたいことは、特定の条件が満たされたとき(「マスクを使用して定義している」)、「都市」の値を「dubai」として割り当てることです。

これは私が正確にやっているものです:

matches[((matches['team1']=='mi') & (matches['team2']=='rcb') & (matches['date']=='2014-04-19')),'city']='Dubai' 

上記のすべての条件が、私は(今NULLである)「街中で値を変更したい満たしている場合には「ドバイ」へ

問題これは発生する:

"シリーズのオブジェクトは、このように、彼らは

をハッシュ化することができない、変更可能です

どうすればいいですか?

+0

使用は、 '' matches.loc [((マッチ[ 'team1'] == 'MI')&(マッチ[ 'team2'] == 'RCB')&(マッチ[」のよう.loc'日付]] == '2014-04-19'))、 'city'] = 'Dubai'' – Zero

+0

ありがとうございました@JohnGalt両者の違いを少し説明できますか?私は混乱しています。どうもありがとうございます –

+0

パンダの[インデックス作成とデータの選択](http://pandas.pydata.org/pandas-docs/stable/indexing.html)を読んでください。アクセス方法 'pd [ix]'と 'pd。col'はNumpyの索引付けとPythonの属性に依存し、それらの制限を守っています。 '.loc [ix、col] 'のようなパンダ固有のアクセス方法が好まれるでしょう。 – FTP

答えて

3

ブラケット([])は、(メソッドが定義されている場合)Pythonオブジェクトのメソッド__getitem__にアクセスします。 pd.DataFrameオブジェクトには、ブラケットdf[array_like_object]を経由して、オブジェクトのような配列を渡すことができますし、それは

可能性がいくつかのいずれかを実行します1

# returns a copy of df with columns ['col1', 'col2'] 
df[['col1', 'col2']] 

可能性2

# returns a slice of which rows have corresponding trues in the mask 
df[boolean_mask] 

スキップ他の可能性


あなたはboolean_mask

((matches['team1']=='mi') & 
(matches['team2']=='rcb') & 
(matches['date']=='2014-04-19')) 

そして、この場合column

'city' 

、それはまさにそれを処理することができますlocに最適だんです
@ JohnGaltあたり

matches.loc[ 
    ((matches['team1']=='mi') & 
    (matches['team2']=='rcb') & 
    (matches['date']=='2014-04-19')), 
    'city' 
] = 'Dubai' 
関連する問題