当符号结尾时,将字符串格式的负数转换为数字

时间:2019-05-27 23:27:43

标签: pandas dataframe format negative-number

我在数据框的某列中具有某些负数,这些负数采用如下字符串格式:“ 500.00-”我需要将该列中的每个负数转换为数字格式。我敢肯定有一个简单的方法可以做到这一点,但是我一直在努力寻找一个特定于熊猫数据框的方法。任何帮助将不胜感激。

我已经尝试了如下所示的基本to_numeric函数,但是无法正确读取它。另外,列中只有一些数字为负数,因此我不能简单地删除所有负号并将列乘以1。

Q1['Credit'] = pd.to_numeric(Q1['Credit'])

3 个答案:

答案 0 :(得分:1)

样本数据:

df:
      num
0   50.00
1  60.00-
2  70.00+
3  -80.00

使用系列str访问器检查最后一位。如果是'-''+',请将其交换到前面。使用df.mask将其仅应用于后缀-/ +的行。最后,在astype的{​​{1}}列

float

答案 1 :(得分:1)

可能有点明确,但可以使用

# build a mask of negative numbers
m_neg = Q1["Credit"].str.endswith("-")
# remove - signs
Q1["Credit"] = Q1["Credit"].str.rstrip("-")
# convert to number
Q1["Credit"] = pd.to_numeric(Q1["Credit"])
# Apply the mask to create the negatives
Q1.loc[m_neg, "Credit"] *= -1 

答案 2 :(得分:0)

让我们考虑以下示例数据帧:

Q1 = pd.DataFrame({'Credit':['500.00-', '100.00', '300.00-']})

    Credit
0  500.00-
1   100.00
2  300.00-

我们可以使用str.endswith创建一个表示负数的掩码。然后,我们使用np.where有条件地将数字转换为负数:

m1 = Q1['Credit'].str.endswith('-')
m2 = Q1['Credit'].str[:-1].astype(float)
Q1['Credit'] = np.where(m1, -m2, m2)

输出

   Credit
0  -500.0
1   100.0
2  -300.0