Для цикла в DataFrame - PullRequest
       3

Для цикла в DataFrame

0 голосов
/ 19 сентября 2019

У меня есть несколько файлов с большим количеством данных и 19 столбцов.Я пытаюсь сделать несколько циклов for и установить его равным первому столбцу, второму и т. Д. В файлах.

import numpy as np
import glob
import pandas as pd

#

lat=np.zeros(90)
long=np.zeros(180)
indat=np.zeros(19)

#

file_in = glob.glob('filenames*.dat'). 
for a in range(140):
   for i in range (90):
       for j in range (180):
            df = pd.DataFrame()
            for f in file_in:
                cols = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] #there are nineteen columns 
                indat = df.append(pd.read_csv(f, delimiter='\\s+', header=None, usecols=cols, skiprows=4), ignore_index=True)
                lat[i]=indat[0] # error here
                long[j]=indat[1]
               #updates some code here
                if i >=70:
                   dens[a,j,i-70]=indat[2]

Это дало мне эту ошибку: ValueError: setting an array element with a sequence.

Обновления:

indat имеет 19 столбцов, много файлов, но все форматы одинаковы.

Образец indat

#columns
#0   1    2      3 ..... 19 
-90  0   2e-12  #just some number
-90  2   3e-12  #just some number
-90  4   4e-12  #just some number
...
-90  360 1e-12  #just some number  
-88  0   1e-11  #just some number
-88  2   2e-11  #just some number
-88  4   3e-11  #just some number
...
-88  360 4e-11  #just some number 
...
90   0   2.5e-12  #just some number
90   2   3.5e-11  #just some number
90   4   4.5e-12  #just some number
...
90   360 1.5e-12  #just some number 

РЕДАКТИРОВАТЬ: Я очищаю код на основе всех предложений

import numpy as np
import glob
import pandas as pd

file_in = glob.glob('filenames*.dat'). 
df = pd.DataFrame()
for f in file_in:
    cols = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
    indat = pd.read_csv(f, delimiter='\\s+', header=None, usecols=cols, skiprows=4)

for a in range(140):
   for i in range (90):
       for j in range (180):
           lat[i]=indat[0] # error here
           long[j]=indat[1]
           if i >=70:
              dens[a,j,i-70]=indat[2]

1 Ответ

0 голосов
/ 19 сентября 2019

вы пытались присвоить столбец (pandas series) indat[0] элементу numpy вектора lat[i]

Кроме того, какой смысл indat=np.zeros(19), когда вы переопределяете его, чтобы бытьфрейм данных позже?

Что такое содержание indat[0]?

Эта строка кода

indat = df.append(pd.read_csv(f, delimiter='\\s+', header=None, usecols=cols, skiprows=4), ignore_index=True)

в основном совпадает с

indat = pd.read_csv(f, delimiter='\\s+', header=None, usecols=cols, skiprows=4)

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *] * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 '* * * * * * * * * * * 10 * 10 *].Если вы просто хотите, чтобы он запускался без ошибок, я предлагаю написать

lat[i] = indat[0].values[0] # take the first value of the vector
long[i] = indat[1].values[0] # take the first value of the vector

Хорошо бы пройтись по учебнику по Numpy и Pandas, поскольку он может быть очень запутанным без некоторого базового понимания.

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