我在数据框的某列中具有某些负数,这些负数采用如下字符串格式:“ 500.00-”我需要将该列中的每个负数转换为数字格式。我敢肯定有一个简单的方法可以做到这一点,但是我一直在努力寻找一个特定于熊猫数据框的方法。任何帮助将不胜感激。
我已经尝试了如下所示的基本to_numeric函数,但是无法正确读取它。另外,列中只有一些数字为负数,因此我不能简单地删除所有负号并将列乘以1。
Q1['Credit'] = pd.to_numeric(Q1['Credit'])
答案 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