我的名为“收缩率”的数据框列如下所示:
-Shrinkage
-($614)
-$0
-$0
-$0
-$0
-$0
-$0
-$0
-($125)
-$320
-$3,779
($2,482)
使用以下代码,我尝试使用for循环和if语句执行多个操作。我想遍历该列,如果对象的字符为“(”,那么我想将其替换为字符“-”,以使该数字变为负数。除了查找并替换负数之外,我还想删除所有字符并使对象变成浮点数以对其进行数学运算。
for i in ['Shrinkage']:
if df['Shrinkage'] == '(':
df['Shrinkage'] = df['Shrinkage'].replace({'(': '-'}).astype(float)
df['Shrinkage'] = df['Shrinkage'].replace({'$': '', ')': '', ',': ''})
else:
df['Shrinkage'].replace({'$': '', ',': ''}, regex=True).astype(float)
我遇到ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。
请理解,我还是python的新手,还没有涉及复杂的代码。请需要一些帮助。
答案 0 :(得分:0)
尝试series.replace,并使用正则表达式删除不需要的字符。
df['Shrinkage'] = df['Shrinkage'].str.replace("\(|\$|\)|,", "")
print(df['Shrinkage'].astype(float))
输出
0 -614.0
1 -0.0
2 -0.0
3 -0.0
4 -0.0
5 -0.0
6 -0.0
7 -0.0
8 -125.0
9 -320.0
10 -3779.0
11 2482.0
Name: Shrinkage, dtype: float64
答案 1 :(得分:0)
您可以这样做:
df['Shrinkage'] = df['Shrinkage'].str.replace('\$|\)|\,', '')
df['Shrinkage'] = df['Shrinkage'].str.replace('\(', '-')
df['Shrinkage'] = df['Shrinkage'].astype(float)
print(df)
Shrinkage
0 -614.0
1 0.0
2 0.0
3 0.0
4 0.0
5 0.0
6 0.0
7 0.0
8 -125.0
9 320.0
10 3779.0
11 -2482.0