【问题标题】:Pandas: can't multiply sequence by non-int of type 'str'熊猫:不能将序列乘以“str”类型的非整数
【发布时间】:2019-09-07 01:42:06
【问题描述】:

看到几个一般问题的答案,我已经使用了一些建议的解决方案,但仍然卡住了。

我有以下代码:

name = ['Sepal-length', 'Sepal-width', 'Petal-length', 'Petal-width', 'Class']
iris_ds = pd.read_csv(url, names=name)

cols=iris_ds.columns.drop('Class')
iris_ds[cols]=iris_ds[cols].apply(pd.to_numeric, errors='coerce')

.......

iris_ds['Sepal-area'] = iris_ds.eval('Sepal-width' * 'Sepal-length')  
print(iris_ds.head(20))

但是,当我运行第二部分的脚本时,我得到以下信息:

Traceback(最近一次调用最后一次):文件“Iris_Data_set1.py”,行 67,在 iris_ds['Petal-area'] = iris_ds.eval('Petal-width' * 'Petal-length') TypeError: can't multiply sequence by non-int of type 'str'

数据类型如下:

花萼长度 float64

花萼宽度 float64

花瓣长度 float64

花瓣宽度 float64

类对象

dtype: 对象

关于如何解决这个问题的任何建议,以便我可以做乘法?

【问题讨论】:

    标签: python pandas python-3.7


    【解决方案1】:

    你有什么理由不能这样做:

    iris_ds['Sepal-area'] = iris_ds.Sepal-width * iris_ds.Sepal-length
    

    我认为可能有两个问题。您可能不应该使用Sepal-length 作为列名,而应该使用Sepal_length(并将其应用于您的其他变量),做出答案:

    iris_ds['Sepal_area'] = iris_ds.Sepal_width * iris_ds.Sepal_length
    

    【讨论】:

    • @Clauric 仅供将来参考,一般来说,使用 - 命名变量是一个坏主意,因为 python 将其解释为减法的数学符号,而不是变量名的一部分.建议改用_python.org/dev/peps/pep-0008/…
    猜你喜欢
    • 2013-07-03
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多