2017-08-30 23 views
0

如何才能最好地獲得熊貓數據框中的最小/最大列值?具體來說,我期待得到最小值/最大值爲字符串的長度,並採取基於送行的價值觀有所行動。使用pandas數據框循環最小/最大列值?

我可以單獨的列這樣做,但我寧願遍歷所有比完成任務一次性的需要的列。

這是我的一關,其工作代碼,但必須有一個更好的辦法,IMO:

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西:'或'...在[ 'JUST', '一些', '子集']:'然後使用'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

該解決方案將評估您一次性感興趣的所有列:)。這個解決方案還需要python 3,因爲它包含條件表達式和F字符串!

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)) 
相關問題