如何在列中找不到列名后修剪所有列

2024-10-01 19:20:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,如下所示:

ID    Sr. No     Col_1    None    Col_2
1      10         Abc     None    XUZ_09
2      20         Xyz     None    Abc_227

我想丢弃None字段之后的所有内容,即Col_1之后的内容。 一种方法如下:

df_final = df_final.iloc[:,:-3]

但是我想使-3动态化。因此,生成的数据帧将是

ID    Sr. No     Col_1    
 1      10         Abc     
 2      20         Xyz     

请问有什么线索吗


Tags: 数据方法nononeid内容dfcol
3条回答

如果列名是类似NoneNoneType或类似None的字符串,则在第一次通过比较0匹配值之前,使用解决方案对其进行比较,并使用比较值对^{}进行比较,最后通过:对^{a2进行传递,以便通过掩码获取所有行和列:

d = {
'ID': [1,2,34],   
'Sr. No': [13,23,343],     
'Col_1': [1,23,4345],    
'None': [None, None, None] 
}
df = pd.DataFrame(d)

mask = (df.columns.isna() | (df.columns == 'None')).cumsum() == 0
df1 = df.loc[:, mask]    
print (df1)
   ID  Sr. No  Col_1
0   1      13      1
1   2      23     23
2  34     343   4345

d = {
'ID': [1,2,34],   
'Sr. No': [13,23,343],     
'Col_1': [1,23,4345],    
None: [None, None, None] 
}
df = pd.DataFrame(d)

mask = (df.columns.isna() | (df.columns == 'None')).cumsum() == 0
df1 = df.loc[:, mask]    
print (df1)
   ID  Sr. No  Col_1
0   1      13      1
1   2      23     23
2  34     343   4345

d = {
'ID': [1,2,34],   
'Sr. No': [13,23,343],     
'Col_1': [1,23,4345],    
'col_z': [None, None, None] 
}
df = pd.DataFrame(d)

mask = (df.columns.isna() | (df.columns == 'None')).cumsum() == 0
df1 = df.loc[:, mask]    
print (df1)
   ID  Sr. No  Col_1 col_z
0   1      13      1  None
1   2      23     23  None
2  34     343   4345  None

编辑:

d = {
'ID': [1,2,34],   
'Sr. No': [13,23,343],     
'Col_1': [1,23,4345] 
}
df = pd.DataFrame(d, index=[1,None,5])

mask = (df.index.isna() | (df.index== 'None')).cumsum() == 0

df1 = df.loc[mask]
print (df1)
   ID  Sr. No  Col_1
1   1      13      1

或按列名称取:

df = df.iloc[:, :(df.columns == 'None').argmax()]                                                             

创建数据帧

d = {
'ID': [1,2,34],   
'Sr. No': [13,23,343],     
'Col_1': [1,23,4345],    
'None': [None, None, None], 
'Col_3': [None, None, None] 
}
df = pd.DataFrame(d)
df

ID  Sr. No  Col_1   None    Col_3
0   1   13  1       None    None
1   2   23  23      None    None
2   34  343 4345    None    None

使用“无”列拆分数据帧

columns = df.columns.to_list()
split_index = columns.index('None')
df = df[columns[:-split_index + 1]]

结果

df
ID  Sr. No  Col_1
0   1   13  1
1   2   23  23
2   34  343 4345
``

相关问题 更多 >

    热门问题