【发布时间】: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]
【问题讨论】:
-
嗨,也许这可能是您感兴趣的stackoverflow.com/questions/4674473/…
-
不清楚您要达到什么目的,我在上面的代码中几乎没有查询 1. 为什么您要在循环中多次读取每个文件? 2.从每个文件中,您只使用第一列和第二列,并且您正在为数组元素分配一个系列,它将替换其他文件中的值
标签: python-3.x pandas numpy dataframe for-loop