【问题标题】:For loop in DataFrameDataFrame中的for循环
【发布时间】:2020-01-19 23:28:10
【问题描述】:

我有多个包含大量数据和 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]

【问题讨论】:

标签: python-3.x pandas numpy dataframe for-loop


【解决方案1】:

您尝试将列 (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)

因为df 从未改变,即它始终是一个空数据框

由于indat 的内容未知,因此很难修复您的代码。 如果你只是想让它运行没有错误,我建议写

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 的教程,因为如果没有一些基本的了解,它可能会非常混乱。

【讨论】:

  • 我添加了indat 文件的样本。
  • 我不太确定你想在经纬度上实现什么目标,它们是不是每列是每个文件的第 1 列和第 2 列的矩阵?
猜你喜欢
  • 2020-01-07
  • 2018-08-02
  • 2021-01-20
  • 2021-12-13
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 2023-03-29
  • 2020-09-23
相关资源
最近更新 更多