【问题标题】:Printing the max and min values with pandas Python使用 pandas Python 打印最大值和最小值
【发布时间】:2021-07-09 20:09:07
【问题描述】:

我正在尝试编写一个函数来打印出input.csv 文件中指定列的所有最大值和最小值及其索引。我要返回最大值的列在max_columns 变量中引用,而要返回最小值的列在min_columns 变量中。但是,它并没有按预期遍历整个数组值,我尝试使用 pandas 来完成它,但是它不起作用。下面的代码是从我之前的帖子中实现的:

input.csv 文件:

element,LNPT,SNPT,NLP,NSP,TNT,TPnL,MxPnL,MnPnL,MxU,MxD
[ 2.  2. 30.],0,0,4,4,8,-0.1,-0.0,-0.1,17127,-3
[ 2.  2. 40.],0,0,2,2,4,0.0,-0.0,-0.0,17141,-3
[ 2.  2. 50.],0,0,2,2,4,0.0,-0.0,-0.0,17139,-3
[ 2.  2. 60.],2,0,6,6,12,0.5,2.3,-1.9,17015,-3
[ 2.  2. 70.],1,0,4,4,8,0.3,0.3,-0.0,17011,-3

代码:

df = pd.read_csv('STDOutputs_Q1.csv')
max_columns= np.array([1,2,3,7,8,10])
min_columns = np.array([4,5,6,9])

def max_vals():
    max_index = df[max_columns].idxmax()
    max_values = df[max_columns].max()
    return results, index
    
def min_vals():
    min_index = df[min_columns].idxmin()
    min_values = df[min_columns].min()
    return results, index

max_values, max_index= max_vals()
min_values, min_index= min_vals()

【问题讨论】:

    标签: python arrays pandas dataframe numpy


    【解决方案1】:

    max_columnsmin_columns 保存整数索引,因此您应该将 iloc 它们作为 df.iloc[:, max_columns]df.iloc[:, min_columns]

    max_columns = np.array([1, 2, 3, 7, 8, 10]) # numeric indexes
    min_columns = np.array([4, 5, 6, 9])
    
    def max_vals():
        max_index = df.iloc[:, max_columns].idxmax() # so not df[max_columns]
        max_values = df.iloc[:, max_columns].max()
        return max_values, max_index
    
    def min_vals():
        min_index = df.iloc[:, min_columns].idxmin()
        min_values = df.iloc[:, min_columns].min()
        return min_values, min_index
    

    您也可以按名称定义max_columnsmin_columns,在这种情况下df[max_columns]df[min_columns] 可以工作:

    max_columns = ['LNPT', 'SNPT', 'NLP', 'MxPnL', 'MnPnL', 'MxD'] # named indexes
    min_columns = ['NSP', 'TNT', 'TPnL', 'MxU']
    
    def max_vals():
        max_index = df[max_columns].idxmax() # so not df.iloc[:, max_columns]
        max_values = df[max_columns].max()
        return max_values, max_index
    
    def min_vals():
        min_index = df[min_columns].idxmin()
        min_values = df[min_columns].min()
        return min_values, min_index
    

    【讨论】:

    • 它给了我错误IndexError: .iloc requires numeric indexers, got ['LNPT' 'SNPT' 'NLP' 'MxPnL' 'MnPnL' 'MxD']
    • 这两个选项是互斥的。如果max_columns 包含列号(如您原来的max_columns),则使用df.iloc[:, max_columns]。如果max_columns 包含列名,则使用df[max_columns]。该错误意味着您尝试使用列名df.iloc[:, max_columns]
    • @tonyselcuk 我编辑了这两个选项以使其更加明确
    猜你喜欢
    • 2015-02-20
    • 2016-10-06
    • 1970-01-01
    • 2019-05-26
    • 2020-09-06
    • 2020-09-19
    • 2020-03-10
    • 2013-09-30
    • 1970-01-01
    相关资源
    最近更新 更多