Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 考虑到中间的空白列,如何计算列数?_Python_Pandas - Fatal编程技术网

Python 考虑到中间的空白列,如何计算列数?

Python 考虑到中间的空白列,如何计算列数?,python,pandas,Python,Pandas,如果df的某些列之间有空格,如何计算列数?我基于XLS文件创建了df,它有这样的问题。 空白列的数量未知,但从不超过20 df = col1 col2 col3 col4 112 ret 56 xx 34 wet 45 yy 如何计算列数: *得到4列(不考虑空白) *得到5列(考虑空白的一个)。 该方法应适用于非空白列之间任意数量的空白列 更新: 熊猫数据帧df创建如下: f_path = "C://tes

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

df =

col1   col2   col3        col4
112    ret    56          xx
34     wet    45          yy
如何计算列数: *得到4列(不考虑空白) *得到5列(考虑空白的一个)。 该方法应适用于非空白列之间任意数量的空白列

更新:

熊猫数据帧
df
创建如下:

f_path = "C://test/myfile_with_blank_columns.xls"
df = pd.read_excel(open(f_path,'rb'), sheet_name='goal')
数据示例(某些文件不包含标题):


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

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:

另一个选择是使用string方法,这将更加健壮,因为它将检测空字符串和空格作为空白列。但是,它将过滤掉任何带有空格的列!因此,只有在为非空列设置了格式良好的列名的情况下,这种方法才能再次发挥作用

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

print(num_cols)
# prints 2

这里有一个简单的解决方案

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

获取列(不考虑空白一个)

获取列(考虑空白的)

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


UHM空白列甚至没有一个名字?@ MHIHITMOTWANI:是的,这是我不能更改的源数据的问题。你需要提供一种构造这个数据框的方法,这样我们就可以理解这个问题。请看下面的答案:请进一步说明空白栏。@ FCHM:请看我的更新。抱歉,但选项1对我不起作用。请查看我的更新以查看数据示例。col.isidentifier()需要一个标题,对吗?我没有说对不起,有些文件不包含标题。我打印了
df\u列
。事实上,空白列的名称“代码>”未命名:“89”,“未命名的:90”,“未命名的:91”,“未命名的:92”,“未命名的:93”,“未命名的:94”< /代码>
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
df1 = dff[col]
df1

   0  1     2     3     4     5         9
0  0  0  24.1  23.9  24.4  24.3  2.880136
1  0  0  24.1  23.9  24.4  24.3  2.878689
2  0  0  24.1  23.9  24.4  24.3  2.875072
3  0  0  24.1  23.9  24.4  24.3  2.883029