修改df中的单元格失败

2024-04-28 08:58:17 发布

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

我试图修改现有df中的单元格——如果我发现字符串没有字母字符(例如“*”),我将其设置为“0.0”字符串,并且在处理所有单元格时,我尝试转换一个列数字类型。 但是由于某些原因设置为“0.0”并不能反映结果df

for i, col in enumerate(cols):
    for ii in range(0, df.shape[0]):
        row = df.iloc[ii]
        value = row[col]

        if isinstance(value, str):
            if not( utils.representsInt(value) or utils.representsFloat(value) ) and re.search('[a-zA-Z]', x) is None:
                df.iat[ii, i] = "0.0"

     df[col] = df[col].astype(np.float_)
    #df[col] = df[col].to_numeric() #this throws error that Series does not have to_numeric()

我犯了个错误

could not convert string to float: 'cat'

当我打印df时,我看到值没有改变。 有什么问题吗

谢谢

测向

f289,f290,f291,f292,f293,f294,f295,f296,f297,f298,f299,f300,f301,f302,f303,f304,f305,f306,f307,f308,f309,f310
01M015,P.S. 015 Roberto Clemente,Elementary,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M019,P.S. 019 Asher Levy,Elementary,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M020,P.S. 020 Anna Silver,Elementary,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M034,P.S. 034 Franklin D. Roosevelt,K-8,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,14
01M063,The STAR Academy - P.S.63,Elementary,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,6
01M064,P.S. 064 Robert Simon,Elementary,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M110,P.S. 110 Florence Nightingale,Elementary,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M134,P.S. 134 Henrietta Szold,Elementary,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M137,P.S. 137 John L. Bernstein,Elementary,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M140,P.S. 140 Nathan Straus,K-8,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M142,P.S. 142 Amalia Castro,Elementary,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M184,P.S. 184m Shuang Wen,K-8,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
01M188,P.S. 188 The Island School,K-8,1.0,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,10

因此,在本例中,我希望这个df具有“0.0”而不是“*”,并且这些列在转换后具有数字数据类型,例如float


Tags: to字符串indfforifvaluenot
1条回答
网友
1楼 · 发布于 2024-04-28 08:58:17

您可以更改返回0.0的条件,我为test设置了x=="*"

df.iloc[:,3:] = df.iloc[:,3:].applymap(lambda x: 0.0 if x=="*" else x)

      f289                            f290        f291  ...  f308  f309  f310
0   01M015       P.S. 015 Roberto Clemente  Elementary  ...   0.0   0.0     0
1   01M019             P.S. 019 Asher Levy  Elementary  ...   0.0   0.0     0
2   01M020            P.S. 020 Anna Silver  Elementary  ...   0.0   0.0     0
3   01M034  P.S. 034 Franklin D. Roosevelt         K-8  ...   0.0   0.0    14
4   01M063       The STAR Academy - P.S.63  Elementary  ...   0.0   0.0     6
5   01M064           P.S. 064 Robert Simon  Elementary  ...   0.0   0.0     0
6   01M110   P.S. 110 Florence Nightingale  Elementary  ...   0.0   0.0     0
7   01M134        P.S. 134 Henrietta Szold  Elementary  ...   0.0   0.0     0
8   01M137      P.S. 137 John L. Bernstein  Elementary  ...   0.0   0.0     0
9   01M140          P.S. 140 Nathan Straus         K-8  ...   0.0   0.0     0
10  01M142          P.S. 142 Amalia Castro  Elementary  ...   0.0   0.0     0
11  01M184            P.S. 184m Shuang Wen         K-8  ...   0.0   0.0     0
12  01M188      P.S. 188 The Island School         K-8  ...   0.0   0.0    10

更新

定义函数

def f(value) :
   if isinstance(value, str):
      if not(utils.representsInt(value) or utils.representsFloat(value) ) and re.search('[a-zA-Z]', x) is None:
      return 0.0
   return float(value)

将其应用于每个单元格

df = df.applymap(f)

相关问题 更多 >