如果值是字符串,Pandas DataFrame会执行某些操作

问题描述 投票:1回答:1

我有一个名为'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
python string pandas dataframe numbers
1个回答
1
投票

只需使用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
© www.soinside.com 2019 - 2024. All rights reserved.