在python中获取切片的pandas数据帧的列数的安全且最有效的方法

时间:2017-12-13 00:11:03

标签: python pandas numpy

我有一个带有参数的函数,可以接受pandas数据帧或数据帧的某些列。当我通过单个柱子时,形状是例如df.shape =(10,)因此尝试使用df.shape [1]获取列数会引发错误。

我通过使用三元语句找到了一个解决方案,但在两种情况下都有更简洁有效的方法来获取列数(当参数是一个包含多于一列的数据帧或一列/一列时切片的数据帧?)。

import pandas as pd
def number_of_cols(input):
    return input.shape[1]
df=pd.DataFrame()
number_of_cols(df)
0   #good
df=pd.DataFrame({'A':[0,1,2],'B':['a','b','c']})
number_of_cols(df)
2   #good
number_of_cols(df['A'].shape[1]) #Throws an error

def number_of_cols(input):
    return 1 if len(input.shape) == 1 else input.shape[1]
number_of_cols(df['A'].shape[1])
1   #good, but is there anything more concise?

1 个答案:

答案 0 :(得分:0)

我会这样做:

def number_of_cols(input):
    try:
        return input.shape[1]
    except IndexError:
        return 1

用法:

In [63]: number_of_cols(df['A'])
Out[63]: 1

In [64]: number_of_cols(df)
Out[64]: 2