Skip to main content
 首页 » 编程设计

python之pandas DataFrame replace() 使用正则表达式

2025年05月04日24EasonJim

我有一个 pandas DataFrame df .我想替换 ↑ (↑后的空格)与+ , 和 ↓ (↓后的空格)与- .例如,df.a[0] (值 ↑ 0.69% )替换为 +0.69% .

df['last_month'] = df['last_month'].replace(r"↑ ","")是不正确的。为什么?

data = [{"a":"↑ 0.69%","b":"↓ 9.93%"},{"a":"↓ 0.46%","b":"↑ 3.3%"},{"a":"↓ 0.78%","b":"↓ 3.43%"}] 
df = pd.DataFrame(data) 
df 
 
    a         b 
0   ↑ 0.69%   ↓ 9.93% 
1   ↓ 0.46%   ↑ 3.3% 
2   ↓ 0.78%   ↓ 3.43% 

在我的原始数据中,↑是一个unicode,所以它没有用。在演示数据中,↑是一个 str(bytes),所以 df['last_month'] = df['last_month'].replace(r"↑ ","")实际上就像 MaxU 一样工作。但是当DataFrame值是unicode时如何替换呢?

请您参考如下方法:

IIUC:

In [28]: df.replace(['↑\s*', '↓\s*'], ['+', '-'], regex=True) 
Out[28]: 
        a       b 
0  +0.69%  -9.93% 
1  -0.46%   +3.3% 
2  -0.78%  -3.43% 

对于 Python 2x:

In [80]: %paste 
data = [{"a":u"↑ 0.69%","b":u"↓ 9.93%"},{"a":u"↓ 0.46%","b":u"↑ 3.3%"},{"a":u"↓ 0.78%","b":u"↓ 3.43%"}] 
df = pd.DataFrame(data) 
df 
## -- End pasted text -- 
Out[80]: 
         a        b 
0  ↑ 0.69%  ↓ 9.93% 
1  ↓ 0.46%   ↑ 3.3% 
2  ↓ 0.78%  ↓ 3.43% 
 
In [81]: %paste 
df = df.replace([u'↑\s*', u'↓\s*'], [u'+', u'-'], regex=True) 
print(df) 
## -- End pasted text -- 
        a       b 
0  +0.69%  -9.93% 
1  -0.46%   +3.3% 
2  -0.78%  -3.43%