Повторять строки массива N раз в зависимости от длины моего df в цикле for не работает. Ошибка 'numpy.ndarray' объект не вызывается "(Python) - PullRequest
1 голос
/ 17 марта 2019

Хорошо, я искал другие подобные вопросы, но просто не могу заставить их работать.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. )

1 Ответ

1 голос
/ 17 марта 2019
 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 - это кадр данных (с конца последнего цикла).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...