我有一个 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%
