python Pandas Math错误仅在一列中,其他工作

wlsrxk51  于 11个月前  发布在  Python
关注(0)|答案(4)|浏览(91)

我有一个脚本,我一直在使用没有问题,它所做的就是创建一个新的列,值增加10%,直到我击中一列.唯一的事情是它的所有数字,没有空格或空/NaN或字母,它做我的头。

df['COST_AUS'] = df['DBP_AUS'].multiply(1.1).round()

个字符
老实说,我不知道这些日志是什么意思:(

x3naxklr

x3naxklr1#

我尝试复制您得到的相同错误,并得出结论DBP_AUS可能包含非数字数据或缺失值(NaN),这会在执行算术运算时导致问题。
要诊断此问题,您可以使用以下命令验证“DBP_AUS”列中的数据类型和NaN值是否存在:

print(df['DBP_AUS'].dtype)

字符串
如果上述代码的输出是object或

print(df['DBP_AUS'].isnull().sum())


上面代码的输出是1,这意味着数据库中有一个非数字数据,你正在对其进行数学运算。
因此,在应用上述代码段后,您的代码将看起来像这样:

print(df['DBP_AUS'].dtype) # output of this line will be "object" 

df['COST_AUS'] = df['DBP_AUS'].multiply(1.1).round()

lmvvr0a8

lmvvr0a82#

删除千位分隔符后,尝试将列转换为数字:

df['COST_AUS'] = df['DBP_AUS'].str.replace(r',', '').astype(float).mul(1.1).round()
print(df)

# Output
    DBP_AUS  COST_AUS
0  1,159.00    1275.0

字符串

qlzsbp2j

qlzsbp2j3#

非常感谢社区,在一些指导下,我们通过使用以下命令成功地将问题识别为数字格式;
首先要验证列中没有null/NaN或除数字以外的任何内容,

print(df['DBP_AUS'].dtype)
print(df['DBP_AUS'].isnull().sum())

字符串
产出是:

Object
0


通过转换字符串添加“.astype(float)":

df['COST_AUS'] = df['DBP_AUS'].astype(float).multiply(1.1)


发现了一个新的错误

ValueError: could not convert string to float: '1,153.00'


由于它显示了'1,153.00',因此对该列进行了格式化,并通过将千位数添加到pd.read.csv中进行了更正

df = pd.read_csv('source', thousands=',')

z3yyvxxp

z3yyvxxp4#

我用最少和可重复的例子来解决问题

import pandas as pd
s = pd.Series([1, 2, '3,000.1'])

字符串
S

0          1
1          2
2    3,000.1
dtype: object


运行以下代码:

s.multiply(1.1).round()


返回错误

TypeError: can't multiply sequence by non-int of type 'float'


因为“3,000.1”不是浮点数。
运行跟随代码

out = s.astype('str').str.replace(',', '').astype('float').multiply(1.1).round()


出来

0       1.0
1       2.0
2    3300.0
dtype: float64


请检查你的例子的类型,并提供minimal and reproducible example之前,问

相关问题