2017-08-30 12 views
0

パンダのデータフレームで最小/最大の列値を取得するにはどうすればよいですか?具体的には、の文字列の長さの最小値/最大値をにして、それらの値に基づいて何らかのアクションをとることを検討しています。pandasデータフレームを使用した最小値/最大値のループ?

私は個々の列に対してこれを行うことができますが、必要なすべての列をループするのは、タスクを1回限りのものとして完了するよりもむしろループしたいと思います。ここで

は動作しますが、IMO、より良い方法がなければならない私の1オフのコードです:

cols = ['STORE_NO', 'SKU'] 
    for name in cols: 
     inventory_df[name] = inventory_df[name].astype(str) 
     long_store = inventory_df.STORE_NO.map(len).max() 
     small_store = inventory_df.STORE_NO.map(len).min() 
     if long_store == small_store: 
      print('Store number values do not appear truncated') 
     else: 
      print('Some store number values may be truncated') 

     long_sku = inventory_df.SKU.map(len).max() 
     small_sku = inventory_df.SKU.map(len).min() 
     if long_sku == small_sku: 
      print('SKU values do not appear truncated') 
     else: 
      print('Some SKU values may be truncated')  
+0

あなたは 'df.columns.valuesでCOLのためにすべての列を反復処理することができ、合理的なルックス' 'df.col'アクセスではなく' df [col] 'を使ってください。 –

答えて

1

使用.columnsあなたのデータフレーム上のすべての列のリストを返すように。次に、このリストを繰り返して、コードサンプルの内容を完成させることができます。あなたが慣れていない場合は

for name in inventory_df.columns: 
    long = inventory_df[name].astype(str).map(len).max() 
    small = inventory_df[name].astype(str).map(len).min() 
    if long == small: 
     print('%s values do not appear truncated' % name) 
    else: 
     print('Some %s values may be truncated' % name) 

%sあなたがnameに格納されている文字列変数をプリントアウトしてみましょう方法を書式文字列です。

+0

ありがとう、それは大きな助けです! – FunnyChef

0

このソリューションは、あなたが興味のあるすべての列を評価します:)。このソリューションには、条件式とF-ストリングが含まれているため、Python 3も必要です。 [ 'JUST'、 'SOME'、 'SUBSET']で `や` ...を:

cols = ['STORE_NO', 'SKU'] 

# A little convenience function for printing. 
message = lambda col, is_truncated: f"{col} values may be truncated." if is_truncated else f"{col} values do not appear truncated." 

# Zip that establishes if char lengths are different for each column 
col_istruncated = df[cols].astype(str).apply(lambda chars: [len(char) for char in chars])\ 
    .apply(lambda char_lengths: True if max(char_lengths) != min(char_lengths) else False, axis=0)\ 
    .items() 

for col, is_truncated in col_istruncated: 
    print(message(col, is_truncated)) 
関連する問題