我有一个表,其中有一个名为'Amount‘的列。单元格值是数字(如1、100和1000 )和字符串(如'(1000)‘和'(999)’(表示负值)的混合。如何将负值字符串更改为数字,如-1000和-999?我不知道如何对panda数据帧应用条件。
import pandas as pd
ws_actual = pd.read_excel(file_name, sheet_name=0)
Project Name Amount
a 1000.53
b (-100.2)
c 999.83
d 99999.1
e 333.62
f (-10502.30)
g (-2036.63)
h 25235
i 69103
j 5923
k 6920
发布于 2018-09-05 07:16:07
只需使用strip
即可。尽管在你的问题中,如果圆括号中的值包含负号,或者如果圆括号需要用负号替换,这是不明确的。如果是后者,那么这里需要一个正则表达式。
df.Amount.astype(str).str.strip('()').astype(float)
0 1000.53
1 -100.20
2 999.83
3 99999.10
4 333.62
5 -10502.30
6 -2036.63
7 25235.00
8 69103.00
9 5923.00
10 6920.00
Name: Amount, dtype: float64
如果您的字符串(如(1000)
)也需要转换为负数:
print(df)
ProjectName Amount
0 a (1000)
1 b 100
2 c (999)
df.Amount.astype(str).str.replace(r'\(([-\d\.]+)\)', r'-\1').astype(float)
0 -1000.0
1 100.0
2 -999.0
Name: Amount, dtype: float64
https://stackoverflow.com/questions/52175020
复制相似问题