从单元格中删除字符并将剩余的浮点数除以 2 in python pandas

Remove characters from a cell and divide remaining float by 2 in python pandas

我有一个包含多列的数据框,其中一些单元格包含字符“DL”和一个浮点数。其他单元格仅包含浮点数。

例如:

Column1 Column2
row1 DL10.4 5.6
row2 4.7 DL8.8

我想用python去掉字符“DL”,把剩下的浮点数除以2,没有字符的单元格保持不变,不除以2。

预期结果:

Column1 Column2
row1 5.2 5.6
row2 4.7 4.4

DL 之后的值使用 Series.str.extractSeries.str.extractall,除以 2,并用原始 DataFrame 替换非 [=13th=] 值:

df1 = df.apply(lambda x: x.str.extract('DL(\d+\.\d+)', expand=False))
df = df1.astype(float).div(2).fillna(df).astype(float)
print (df)
      Column1  Column2
row1      5.2      5.6
row2      4.7      4.4

我假设您有一种循环遍历数据集中每一行的方法。 考虑到这一点,像这样的东西应该适合你:

import re
for row in df.iterrows():
    for col_value in row:
        reg_match = re.match("^DL([0-9]+\.[0-9])", col_value)
        if reg_match:
            num = float(reg_match.group(1))
            col_value = num

我不确定在这种情况下 Python 是否会抱怨修改 col_value。如果是这样,您可能希望将新值保存到新的数据框中。

您可以在原始 DF 上使用 applymap() 方法并将结果存储在新的 DF 中:

df2 = df.applymap(lambda x: float(x[2:])/2 if isinstance(x, str) else x)

这将检查该值是否为字符串,然后在转换为浮点数并除以二之前将除前两个字符之外的所有字符切片。

如果您想将值四舍五入为 1.d.p,您可以使用下面的修改版本:

 df2 = df.applymap(lambda x: round(float(x[2:])/2, 1) if isinstance(x, str) else x)

像这样:

df.applymap(lambda x: float(x.replace('DL', ''))/2 if 'DL' in x else x)
'''
     Column1 Column2
row1     5.2     5.6
row2     4.7     4.4
'''