我有一个名为'Amount'列的表。单元格值是诸如1,100和1000的数字的混合,以及诸如'(1000)'和'(999)'的字符串,其表示负值。如何将负值的字符串更改为数字,如-1000和-999?我不知道如何在熊猫数据框架上应用条件。
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
只需使用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