首页 > 解决方案 > 根据我的 df 在 for 循环中的长度重复数组的行 N 次不起作用。错误“numpy.ndarray”对象不可调用”(Python)

问题描述

好的,我一直在寻找其他类似的问题,但我无法让它发挥作用。1) 我有一个读取多个文件的 for 循环 2) 对于每个文件,我需要它的长度 (T) 3) 然后我需要 df 重复 (T) 次的值。

如果我不使用 for 循环,这可以正常工作,但是通过在循环中使用相同的脚本,我得到的错误是“numpy.ndarray”对象不可调用。我相信这是因为我将 np.repeat 视为一个函数,但我不确定如何修复它。关于如何解决这个问题有什么好的建议吗?

result_files = '/Users/result_files' 
reservoirs = ['AA','AB', etc.]

for res in reservoirs:
    res_files = pd.read_csv('{}/{}_storage.csv'.format(result_files,res), index_col=0, skiprows=1, parse_dates=True)

    T = len(res_files)

    ### Df of number of days per month x length of reservoir's data 
    df = pd.DataFrame.from_dict(df, orient='index')
    df = df.transpose()   
    df = pd.DataFrame(np.repeat(df.values,T,axis=0))

错误

  File "/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py", line 974, in from_dict
    if isinstance(list(data.values())[0], (Series, dict)):

TypeError: 'numpy.ndarray' object is not callable

例如,假设我的 df 具有以下值:

df= ( 1.3, 1.5, 1.7)

我的文件长度为 3,我的输出应该是这样的

T = 3


[Out]
df= ( 1.3, 1.5, 1.7
      1.3, 1.5, 1.7
      1.3, 1.5, 1.7. )

标签: pythonloopsnumpy

解决方案


 File "/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py", line 974, in from_dict
    if isinstance(list(data.values())[0], (Series, dict)):

TypeError: 'numpy.ndarray' object is not callable

如果data是一个数据框,它会产生这个错误,因为value是一个数组,而不是一个函数。请参阅 DF 文档:

DataFrame.values
Return a Numpy representation of the DataFrame.

期望的是from_dict一个字典,它确实有一个values方法。

pd.DataFrame.from_dict(df, orient='index')

因此,如果将您的代码创建为字典,则您的代码将在第一次迭代中工作df,但在下一个循环中失败时df是数据帧(从最后一个循环结束)。


推荐阅读