Py学习  »  Python

根据for循环中df的长度,重复数组中的行n次不起作用。错误“numpy.ndarray”对象不可调用(python)

Lau • 5 年前 • 1118 次点击  

好吧,我找过其他类似的问题,但我就是没法解决。 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. )
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31473
 
1118 次点击  
文章 [ 1 ]  |  最新文章 5 年前
hpaulj
Reply   •   1 楼
hpaulj    5 年前
 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 Expires是一个字典,它确实有一个 values 方法。

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

因此,如果 df 创建为字典,但在下一个循环失败时 东风 是一个数据帧(从最后一个循环结束)。