2017-08-01 1 views
0
list = [['apple', 'orange', 'pear'], ['peach', 'apple', 'pear']] 
df = pd.DataFrame(list) 
print df 

Out[172]: 
     0  1  2 
0 apple orange pear 
1 peach apple pear 

dfの各行に部分文字 'pe'の最初の一致を取得しようとしています。基本的に出力は以下のデータフレームになります。パンダデータフレームの各行に部分文字列を含む最初の値を返します

 0 
0 pear 
1 peach 

可能な解決策を提示してください。

+1

してくださいしてくださいしてください、組み込みの 'list'型のコンストラクタ*をシャドウイングしているので、' list = [...] 'を実行しないでください。これは、道路を辿ることが難しいバグに結びつく可能性があり、すべてが悪い考えです。 –

+1

先端をありがとう –

答えて

2

強引なアプローチ:

In [22]: df 
Out[22]: 
     0  1  2 
0 apple orange pear 
1 peach apple pear 

In [23]: def startswith(prefix, default=''): 
    ...:  def f(S): 
    ...:   for val in S: 
    ...:    if val.startswith(prefix): 
    ...:     return val 
    ...:   return default 
    ...:  return f 
    ...: 

In [24]: df.apply(startswith('pe'), axis=1) 
Out[24]: 
0  pear 
1 peach 
dtype: object 

注、これは効率的であることを行っていません。本質的には、かさばった、ネストされた、Python forループです。たぶん、たくさんの文字列がある場合、DataFrameは正しいデータ構造ではありません。

注、(あなたが軸= 0、デフォルト値を渡した場合)df.applyはすべてcolumに適用される機能をとるか、すべての行に(あなたが軸= 1を渡した場合)。

startswith機能は機能の工場あるので、それはあなたが好きに設定することができます一致するものを(見つけたことがない場合、あなたはそれを検索したいプレフィックス、および返されるデフォルト値を渡すことができます)、そしては、これらの制約が与えられた行を検索する新しい関数を返します。

+0

私はdf.applyを試しました(ラムダx:xではx.contains( 'pe')else np.nan、axis = 1)、これは動作していないようです。私はここで何が間違っていますか? –

+0

@Swarnar 'apply' getに渡す関数が(軸のパラメータに応じて)行または列の' pd.Series'を渡すためです。注意しておきたいのは、パラメータ 'S'を使用しています。 'pd.Series'に' .contains'メソッドがありません –

+0

@Swarnarまた、* '' pe "'で始まる文字列を探したいという意図を誤って解釈したと思いますが、簡単に上記を修正して探すことができます'' pe ''を含みますが、 '' val.startswith(prefix) 'の代わりに' 'val:'で接頭辞を使用する文字列 –

0

@ juanpa.arrivillagaとほぼ同じ解決策があります。多次元リストの入力が比較的小さいと予想する限り、このネストされたループはうまくいくはずです。

多次元配列を(DataFrameに配置される前に)ループし、そのリストを検索して、 'pe'(または何を検索しているか)で始まる文字列が最初に見つかったものを探します。その文字列を1項目リストとして結果リストに挿入します。そのリストを作成した後、再度DataFrameに挿入します。

ます。myList = [[ 'りんご'、 'オレンジ'、 'ナシ']、[ '桃'、 'りんご'、 'ナシ']] resultList = []

for row in myList: 
    for fruit in row: 
     if fruit.startswith('pe'): 
      resultList.append([fruit]) 
      break 

df2 = pd.DataFrame(resultList) 
printdf 
関連する問題