考虑空白列之间如何计算列数?

时间:2019-04-16 10:21:07

标签: python pandas

如果df的某些列之间有空格,如何计算列数?我基于XLS文件创建了df,存在这样的问题。 空白列的数量是未知的,但永远不会超过20。

df =

col1   col2   col3        col4
112    ret    56          xx
34     wet    45          yy

如何计算列数:  *获得4列(不考虑空白列)  *得到5列(考虑空白)。

该方法应适用于非空白列之间的任意数量的空白列。

更新:

pandas DataFrame df的创建过程如下:

f_path = "C://test/myfile_with_blank_columns.xls"
df = pd.read_excel(open(f_path,'rb'), sheet_name='goal')

数据示例(某些文件不包含标题):

0   0   24.1    23.9    24.4    24.3                            2.880136
0   0   24.1    23.9    24.4    24.3                            2.878689
0   0   24.1    23.9    24.4    24.3                            2.875072
0   0   24.1    23.9    24.4    24.3                            2.883029

2 个答案:

答案 0 :(得分:1)

这取决于空白列的格式。例如,考虑它们为空字符串的情况:

df = pd.DataFrame({'A': [1,2,3], 
                   '' : ['','',''], 
                   'B': [1,2,3]})

选项1:

您可以尝试计算空列数:

df_columns = list(df.columns)

num_cols = len(df_columns) - df_columns.count('')

print(num_cols)
# returns 2

选项2:

另一种选择是使用.isidentifier()字符串方法,这将更加健壮,因为它将检测空字符串和空格作为空白列。但是,它将过滤掉所有带有空格的列!因此,只有当您为非空列设置了格式正确的列名时,这才再次起作用。

num_cols = np.sum([col.isidentifier() for col in df.columns])

print(num_cols)
# prints 2

答案 1 :(得分:0)

这是简单的解决方案

GetHwidDataController ctrlOne = ...
SetHwidDataController ctrlTwo = ...

assertTrue ctrlOne.apiKeysDb == ctrlTwo.apiKeysDb 
        && ctrlOne.banwareDb == ctrlTwo.banwareDb

获取列(不考虑空白列)

dff = pd.read_excel('D:/test.xlsx',sheet_name='goal',header=None, na_values=' ') #This will convert blank values to NaN

dff 

   0  1     2     3     4     5   6   7   8         9
0  0  0  24.1  23.9  24.4  24.3 NaN NaN NaN  2.880136
1  0  0  24.1  23.9  24.4  24.3 NaN NaN NaN  2.878689
2  0  0  24.1  23.9  24.4  24.3 NaN NaN NaN  2.875072
3  0  0  24.1  23.9  24.4  24.3 NaN NaN NaN  2.883029

获取列(考虑空白列)

col = list(dff.drop(dff.loc[:,list((100*(dff.isnull().sum()/len(dff.index))==100))].columns, 1).columns.values)
print(col)

# [0, 1, 2, 3, 4, 5, 9]

print(len(col))

# 7

注意:您可以创建不带空白列的单独数据框

all_col = dff.columns.tolist()
print(all_col)

# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(len(all_col))

# 10