gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:22 33 4
gpt4 key购买 nike

如何使用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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com