从熊猫python中的行中删除特殊字符

时间:2020-05-28 17:32:32

标签: python pandas dataframe

我具有以下数据框...无法删除单元格的“-”字符并将其修整为右侧的“ int”数字:

    Branch   Market Company     Brand Name  MRP 2020-05-15 2020-05-19 2020-05-22 2020-05-26
1      USA      abc     xqz           A     165    180-190    170-180        170        170
2      USA      abc     xqz           B     165    180-190    170-180        170        170
3      USA      abc     xqz           C     100        120    110-120        120        120
4      USA      abc     xqz           D      95        110        100        100        110
5      USA      abc     xqz           E      59         70         70         70         70

想要以下数据框来绘制散布图,其品牌名称在x轴上,MRP在y轴上。

    Branch   Market Company     Brand Name  MRP 2020-05-15 2020-05-19 2020-05-22 2020-05-26
1      USA      abc     xqz           A     165        185        175        170        170
2      USA      abc     xqz           B     165        185        175        170        170
3      USA      abc     xqz           C     100        120        115        120        120
4      USA      abc     xqz           D      95        110        100        100        110
5      USA      abc     xqz           E      59         70         70         70         70

您能帮忙吗?尝试了许多代码,但无法获得所需的结果/ df。

3 个答案:

答案 0 :(得分:0)

让我们尝试一下:

# extract the date columns
cols = [col for col in df.columns if '-' in col]

df[cols] = (df[cols].astype(str).stack()
     .str.extractall('(\d+)')
     .astype(float).mean(level=[0,1])[0]
     .unstack()
)

输出:

      Branch  Market    Company    Brand    Name      MRP    2020-05-15    2020-05-19    2020-05-22    2020-05-26
--  --------  --------  ---------  -------  ------  -----  ------------  ------------  ------------  ------------
 0         1  USA       abc        xqz      A         165          92.5          87.5            85            85
 1         2  USA       abc        xqz      B         165          92.5          87.5            85            85
 2         3  USA       abc        xqz      C         100          60            57.5            60            60
 3         4  USA       abc        xqz      D          95          55            50              50            55
 4         5  USA       abc        xqz      E          59          35            35              35            35

答案 1 :(得分:0)

带有np.wherestr.split

df['2020-05-15'] = np.where((df['2020-05-15'].str.contains('-')),
                            (df['2020-05-15'].str.split('-').str[0].astype(float) + df['2020-05-15'].str.split('-').str[1].astype(float)) / 2,
                            df['2020-05-15'])
df['2020-05-19'] = np.where((df['2020-05-19'].str.contains('-')),
                            (df['2020-05-19'].str.split('-').str[0].astype(float) + df['2020-05-19'].str.split('-').str[1].astype(float)) / 2,
                            df['2020-05-19'])
df

答案 2 :(得分:0)

使用 Series.str.split statistics.mean

dd

输出:

import statistics

df['2020-05-15'] = df['2020-05-15'].str.split('-').apply(lambda x: statistics.mean(list(map(int, x))))

df['2020-05-19'] = df['2020-05-19'].str.split('-').apply(lambda x: statistics.mean(list(map(int, x))))