替换在熊猫的整个数据框中包含子字符串的整个字符串

时间:2020-01-05 11:41:19

标签: python pandas

我想替换所有包含特定子字符串的字符串。因此,例如,如果我有此数据框:

module: {
    rules: [
      {
        test: /\.(js)$/,
        exclude: /node_modules/,
        loader: require.resolve('babel-loader'),
      },
      {
        test: /\.(png|svg|jpg|gif)$/,
        include: [
          path.resolve(__dirname, 'src/assets/'),
        ],
        use: [
          'file-loader'
        ],
      },
      {
        test: /\.hbs$/,
        loader: require.resolve('handlebars-loader'),
        query: {
          inlineRequires: '/assets/',
        },
      },
      {
                test: /\.scss$/,
                use: [
                    {
                        loader: require.resolve('file-loader'),
                        options: {
                            name: 'main.css',
                        }
                    },
                    require.resolve('extract-loader'),
                    require.resolve('css-loader'),
                    require.resolve('postcss-loader'),
                    require.resolve('sass-loader'),
                ],
            }
    ]
  },

我想用这样的字符串'test'替换包含import pandas as pd df = pd.DataFrame({'col_1': ['abc', 'abc123', 'abc456'], 'col_2': ['abc123', '123', 'abc456']}) 的字符串:

'abc123'

我尝试过:

df = pd.DataFrame({'col_1': ['abc', 'test', 'abc456'], 
               'col_2': ['test', '123', 'abc456']})

但是它每次只能处理一个col,我要处理数百个col。我怎么能一次做到呢。

2 个答案:

答案 0 :(得分:4)

请注意,由于您在问题中提到了“子字符串”,因此我将示例更改为包含zzabc123zz,但您提供的示例并未显示该用例。

您可以将df.replace与正则表达式一起使用。

import pandas as pd
import re

df = pd.DataFrame({'col_1': ['abc', 'abc123', 'abc456'],
                   'col_2': ['abc123', '123', 'zzabc123zz']})

df.replace(re.compile('.*abc123.*'), 'test', inplace=True)
print(df)

输出

    col_1  col_2
0     abc   test
1    test    123
2  abc456   test

答案 1 :(得分:1)

使用str.contains的另一个版本,其中selects来自df的对象dtypes和stacks进行str的列包含,最后包含unstackmask

m=df.select_dtypes('O')
df[m.columns]=m.mask(m.stack(dropna=False).str.contains('abc123',na=False).unstack(),'test')
print(df)

    col_1   col_2
0     abc    test
1    test     123
2  abc456  abc456