属性错误:'numpy.ndarray'对象没有'apply'属性。

3
Department = input("Is there a list you would like to view")


readfile = pd.read_csv('6.csv')
filevalues= readfile.loc[readfile['Customer'].str.contains(Department, na=False), 'June-18\nQty'] 
filevalues = filevalues.fillna(int(0))

int_series = filevalues.values.astype(int) 
calculated_series = int_series.apply(lambda x: filevalues*1.3)


print(filevalues)

我遇到了这个错误: AttributeError: 'numpy.ndarray' object has no attribute 'apply'

我已经查看了这个网站,但没有任何解决方案似乎适用于我的情况。我只想在这个序列中将数据乘以1.3。谢谢


1
int_series * 1.3? - rafaelc
@RafaelC 我试图将列表中的每个值乘以1.3。我使用了这种方法,因为据说它应该将系列转换为int类型。 - Michael Norman
int_series * 1.3 会将系列中的每个值乘以1.3。 - roganjosh
@roganjosh 好的,那你知道我出错的原因吗? - Michael Norman
原因很简单:numpy数组中没有apply函数。但是,在pandas.Series对象中有,如果您使用filevalues.astype(int)而不是filevalues.values.astype(int),则会得到该对象。 - rafaelc
显示剩余2条评论
2个回答

1
这里有两个问题。
1. 通过使用`.values`,您实际上访问了底层的`numpy`数组;您不再拥有一个`pandas.Series`。`numpy`数组没有`apply`方法。
2. 您正在尝试对简单的乘法使用`apply`,这比使用向量化方法慢几个数量级。
请参见下面:
import pandas as pd
import numpy as np

df = pd.DataFrame({'a': np.arange(1000, dtype=np.float64)})
print(type(df['a']))
# Gives pandas.core.series.Series

print(type(df['a'].values))
# Gives numpy.ndarray

# The vectorized approach
df['a'] = df['a'] * 1.3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接