2017-02-03 13 views
0

私は以下のデータフレームを持っています。私が今やりたいことは、単語の数を余分に追加することです。私は、データを印刷するときしかし、今、私は、カウント内の任意の値を参照してくださいいけない取得データフレーム内の新しい行に値を追加

data['Count'] = '' 
for index, i in data.iterrows(): 
    y = len(i['Content']) 
    i['Count'] = y 

import pandas as pd 
df = pd.DataFrame([['These are two words', 1], ['Two words', 2]], columns=('body', 'ticketID')) 

だからそのため私は、これを行います。ここで何がうまくいかないかに関する提案はありますか?

答えて

0

実装に間違いがあることがあります。

まず、2つのコードブロックで、異なる変数を使用しています。最初のデータフレームはdfと表示され、2番目のデータフレームはdataとなります。これは事故にありますか?

第2に、変数yは単語の数ではなく、単に文字列の長さをカウントします。文字列内の単語数をカウントするには、lenstring.split()とすると、空白が検出されるたびに文字列が分割されます。別のキャラクターに分割したい場合は、その文字を単に引数として与えることができます:string.split(',')

最後に、パンダのデータフレームと一連のインデックス作成のための3つの異なる機能を有し、データを選択:

  • locラベルベースのインデックス
  • ilocのインデックスベースのインデックス用
  • ix、混合インデックス用

標準のPythonインデックスよりも、これらの関数の使用が好ましいdf['Count']df.loc[:, 'Count']に置き換えてください。この詳細については、in the docsを参照してください。だからここ

は、あなたが希望何をバージョンです:

import pandas as pd 

df = pd.DataFrame([['These are two words', 1], ['Two words', 2]], columns=('body', 'ticketID')) 

df.loc[:, 'Count'] = '' 
for idx, row in df.iterrows(): 
    num_words = len(row.loc['body'].split()) 
    df.ix[idx, 'Count'] = num_words 

>>> df 
        body ticketID Count 
0 These are two words   1  4 
1   Two words   2  2 

素敵なPython的ワンライナーはdf.apply機能を使用することによってもあります:

df.loc[:, 'count'] = df.apply(lambda row: len(row.loc['body'].split()), axis=1) 
関連する問題