Skip to main content
 首页 » 编程设计

python之用空值替换数据框子集的空格

2025年05月04日15yjmyzz

对于下面的数据框,

 id  words   A   B   C   D  E   
 1   new a   1       1    
 2   good v  1   
 3   star c          1 
 4   never                   
 5   final    

我尝试使用以下代码将空格替换为空值:

df1.loc[:, ["A", "B", "C", "E", "D" ]].replace (r'\s+', np.nan, regex = True, inplace = True) 

但是没有用。我也试过这段代码:

df1[["A", "B", "C", "E", "D" ]].replace (r'\s+', np.nan, regex = True, inplace = True) 

它也没有用。

但是使用下面的代码,它起作用了:

df1.A.replace (r'\s+', np.nan, regex = True, inplace = True) 
df1.B.replace (r'\s+', np.nan, regex = True, inplace = True) 
df1.C.replace (r'\s+', np.nan, regex = True, inplace = True) 
df1.D.replace (r'\s+', np.nan, regex = True, inplace = True) 
df1.E.replace (r'\s+', np.nan, regex = True, inplace = True) 

有人知道为什么吗?谢谢。

请您参考如下方法:

当您从 DataFrame 中选择列时,返回的对象是一个副本。如果您对该副本调用方法,则 inplace 参数将对副本起作用——而不是对实际的 DataFrame。

df1.loc[:, ["A", "B", "C", "E", "D" ]].replace (r'\s+', np.nan, regex = True, inplace = True) 

这一行实际上修改了一个 DataFrame,但是由于该 DataFrame 没有分配给任何东西,所以您看不到结果。

使用示例 DataFrame:

df = pd.DataFrame() 
df['words'] = ['x', 'y', 'z', 't'] 
df['A'] = [1, 1, '', ''] 
df['B'] = ['', '', '', ''] 
df['C'] = [1, '', 1, ''] 
df['D'] = ['', '   ', '     ', ' '] 
df['E'] = ['    ', ' ', '', ''] 
 
df 
Out:  
  words  A B  C      D     E 
0     x  1    1              
1     y  1                   
2     z       1              
3     t                      

您需要将结果分配回来:

cols = ["A", "B", "C", "E", "D" ]    
df.loc[:, cols] = df.loc[:, cols].replace (r'\s+', np.nan, regex=True) 

请注意,这将仅替换具有 1 个或多个空格的单元格。如果您也需要替换空字符串,请将其更改为

df.loc[:, cols] = df.loc[:, cols].replace (r'\s*', np.nan, regex=True) 
 
df 
Out:  
  words    A    B    C    D    E 
0     x    1  NaN    1  NaN  NaN 
1     y    1  NaN  NaN  NaN  NaN 
2     z  NaN  NaN    1  NaN  NaN 
3     t  NaN  NaN  NaN  NaN  NaN