【问题标题】:Subtracting numbers from 2 dataframe columns in Python从 Python 中的 2 个数据框列中减去数字
【发布时间】:2017-03-17 02:54:05
【问题描述】:

我是 Python 的初学者,我在论坛上搜索了我的问题的答案,但没有成功。

我有一个矩阵,想从另一列的数字中减去一列的数字,然后用结果创建一个新列。

我试过了:

df['new column]=df['column 1']-df['column 2']

我的输出是:TypeError: unsupported operand type(s) for -: 'str' and 'str'

然后我尝试将这些列转换为整数,然后使用以下行执行减法:

df['column 2']=df['column 2'].astype(int)

我的输出是:ValueError: cannot convert float NaN to integer

(我的数据框中有一些 NaN)。然后我尝试用 使用以下代码的空字符串:

def remove_nan(s):
    import math
    """ remove np.nan"""
    if math.isnan(s) == True:
        s.replace( np.nan,"")
    else:
        return s

df['column 1'] = df.apply(remove_nan, axis=0)

我的输出是:TypeError: ("cannot convert the series to <class 'float'>", 'occurred at index ID Number')

如果有人能提供有关我在哪里犯错误的见解,我将不胜感激。

感谢您的帮助。

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

使用pd.to_numeric 转换为数字,参数errors='coerce' 在不是数字时给出nan

考虑df

df = pd.DataFrame(dict(A=list('456 8'), B=list('1 345')))

print(df)

   A  B
0  4  1
1  5   
2  6  3
3     4
4  8  5

pd.to_numeric之后

df = df.apply(pd.to_numeric, errors='coerce')

print(df)

     A    B
0  4.0  1.0
1  5.0  NaN
2  6.0  3.0
3  NaN  4.0
4  8.0  5.0

现在我们可以进行列数学运算了

df['C'] = df.A - df.B

print(df)

     A    B    C
0  4.0  1.0  3.0
1  5.0  NaN  NaN
2  6.0  3.0  3.0
3  NaN  4.0  NaN
4  8.0  5.0  3.0

如果你想假设缺失值为零

df['C'] = df.A.sub(df.B, fill_value=0)

print(df)



    A    B    C
0  4.0  1.0  3.0
1  5.0  NaN  5.0
2  6.0  3.0  3.0
3  NaN  4.0 -4.0
4  8.0  5.0  3.0

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    相关资源
    最近更新 更多