python - pandas.DataFrame.replace,对于第一列

标签 python python-3.x replace dataframe

如何使用pandas.DataFrame.replace替换 pandas 数据框中所有出现的字符串?

这似乎是一个相当愚蠢的问题,但是请take a look here ,

即,在以下三个 DataFrame.replace 中,只有一个有效,其他两个无效。我该如何修复它们?

另外,如何限制第一列内的替换? (我尝试使用 , axis=1,但被告知它现已弃用)。谢谢。

df = pd.DataFrame({'A': np.random.choice(['foo', 'bar'], 100),
                   'B': np.random.choice(['one', 'two', 'three'], 100),
                   'C': np.random.choice(['I1', 'I2', 'I3', 'I4'], 100),
                   'D': np.random.randint(-10,11,100),
                   'E': np.random.randn(100)})

p = pd.pivot_table(df, index=['A','B'], columns='C', values='D')
df.replace("fo","fu", regex=True,inplace=True)
p.replace("fo","fu", regex=True,inplace=True)
p.index = p.index.to_series().str.join('-')
r=p.copy()
r.replace("fo","fu", regex=True,inplace=True)

最佳答案

仅在一列中进行替换

将该列作为系列获取并使用 Series.replace 方法:

df['A'] = df['A'].replace("fo", "fu", regex=True)

df['A'].replace("fo", "fu", regex=True, inplace=True)

在索引中进行替换

Series.replaceDataFrame.replace 均仅作用于数据本身,而不作用于索引。您需要将索引重置为列,进行替换并重新设置索引。

r = p.copy()
r.index = r.index.to_series().str.join('-')
r.index.name = 'A-B'

r = (r.reset_index()                     # reset the index
      .replace('fo', 'fu', regex=True)   # make the replacement
      .set_index('A-B'))                 # set the index again

您可以将其与上面的内容结合起来 - 因此替换发生在索引中。

r = p.copy()
r.index = r.index.to_series().str.join('-')
r.index.name = 'A-B'

r = r.reset_index()
r['A-B'] = r['A-B'].replace('fo', 'fu', regex=True)
r = r.set_index('A-B')

@juanpa.arrivilillaga 的代码更短:

r.index = r.index.to_series().replace('fo','fu', regex=True)

MultiIndex中进行替换

同样,您需要重置所需的 MultiIndex 级别,进行替换并将其放回索引中。

p = (p.reset_index(level='A')            # reset only level 'A'
      .replace('fo', 'fu', regex=True)   # make the replacement
      .set_index('A', append=True)       # send 'A' to the index again
      .swaplevel())                      # if you want 'A' before 'B'

或者,在该索引级别进行替换:

p = p.reset_index(level='A')
p['A'] = p['A'].replace('fo', 'fu', regex=True)
p = p.set_index('A', append=True).swaplevel()

但请注意

p.index = p.index.to_series().replace('fo', 'fu', regex=True)

这里并没有给出你想要的东西——它用普通索引替换了MultiIndex

关于python - pandas.DataFrame.replace,对于第一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38644794/

相关文章:

python - 如何使用 Python 从 7z 存档中读取文件?

python - 什么可以使 signal.signal 长时间阻塞?

python-3.x - 在 Python3 MacOS 上安装 Cartopy 的问题

python - 在 Django 中定义 View 和 url。为什么不使用括号来调用函数?

Java:从字符串中删除引号

Python:创建循环来更新数据

python - 如何授予用户在 bash 中创建和写入文件的权限?

python - 在python中将文本文件转换为tiff文件

linux - 脚本和空格

javascript - 在字符串中查找部分但替换整个大小写正则表达式?