2017-02-08 3 views
4

私はちょうどパンダを使い始めています。データフレームのようなデータフレームを扱うのは難しいです。何度も何度も行を反復せずに何かをする方法を考え出すことができません。パンダを正しく実行する...ループを使用するのではなく

たとえば、予算情報を持つデータフレームがあります。 ベンダー名でベンダー名

  • 何とか何とか何とかへ

    1. 何とか何とか何とか:私は3つの潜在的な形式のいずれかの文字列である「簡単な説明」から「ベンダー」を、抽出したいです
    2. ベンダー名

    私は、次のコードを使用して、これを行うことができますが、私は助けるが、それは適切にパンダを使用していないことを感じることができません。それを改善する上でのあらゆる考え方?

    for i, row in dataframe.iterrows(): 
        current = dataframe['short description'][i] 
        if 'to' in current: 
         point_of_break = current.index('to') + 3 
         dataframe['vendor'][i] = current[point_of_break:] 
        elif 'at' in current: 
         point_of_break = current.index('at') + 3 
         dataframe['vendor'][i] = current[point_of_break:] 
        else: 
         dataframe['vendor'][i] = current 
    
  • +0

    をあなたは正規表現を使用して試みることができる - その方法のためhttp://pandas.pydata.org/pandas-docs/stable/text.htmlを見てみましょう正規表現をサポートする –

    +0

    すべての行にベンダー名が引用符で囲まれているか、ベンダー名が各文字列のどこに含まれているかを示すために使用していますか? – DSM

    +0

    それは私が意味するものではありません!私のせい。元の質問を更新して明確にします。 – user4896331

    答えて

    3

    私はあなたがtoatstr.splitを使用して、str[-1]によって、リストの最後の値を選択することができると思います。

    私はこのsolutionを実装しました。

    df = pd.DataFrame({'A':['blah blah blah to "vendor name"', 
             'blah blah blah at "vendor name"', 
             '"vendor name"']}) 
    print (df) 
    
               A 
    0 blah blah blah to "vendor name" 
    1 blah blah blah at "vendor name" 
    2     "vendor name" 
    
    print (df.A.str.split('[at|to]\s+')) 
    0 [blah blah blah t, "vendor name"] 
    1 [blah blah blah a, "vendor name"] 
    2      ["vendor name"] 
    Name: A, dtype: object 
    
    df['vendor'] = df.A.str.split('(at|to) *').str[-1] 
    print (df) 
               A   vendor 
    0 blah blah blah to "vendor name" "vendor name" 
    1 blah blah blah at "vendor name" "vendor name" 
    2     "vendor name" "vendor name" 
    

    代わりに使用します。

    df['vendor'] = df.A.str.split('[at|to]\s+').str[-1] 
    print (df) 
               A   vendor 
    0 blah blah blah to "vendor name" "vendor name" 
    1 blah blah blah at "vendor name" "vendor name" 
    2     "vendor name" "vendor name" 
    
    +0

    非常に良い。おそらく私の答えよりも簡単です。 – CodeMonkey

    +0

    これはうまくいくようです。良いですね。 解決策の1つを他のものよりも選択する必要がある理由は何ですか? – user4896331

    +0

    これは簡単ですが、それはあなた次第です。受付いただきありがとうございます! – jezrael

    関連する問題