您好我在文件中有每日数据,而每日数据按月按列排列。一开始就有一些文件信息。数据看起来像:
Day Jan. Feb. Mar. Apr. May Jun. Jul. Aug. Sep. Oct. Nov. Dec. Year
01 15.2 12.3 9.96 10.1 15.0 33.7 137 309 182 62.6 27.4 17.2
02 14.9 12.3 9.96 9.96 16.4 38.2 109 342 197 69.9 25.4 16.6
03 14.9 12.3 9.78 10.3 17.3 50.3 118 472 184 68.7 24.5 17.0
04 14.6 12.3 9.69 10.3 18.7 58.1 152 275 190 68.7 24.5 16.6
05 14.4 12.3 9.51 10.1 18.9 44.5 165 188 206 69.9 24.0 16.5
06 14.1 12.3 9.41 10.3 19.8 44.8 142 157 192 62.2 23.8 16.1
07 14.0 12.3 9.32 10.3 20.4 52.6 121 146 182 58.9 24.9 15.6
我用这段代码来读取数据
data ='AQ404.7_01.txt'
with open(data) as fo:
data = fo.readlines()[9:41]
df = data[1:32]
df = [d.strip() for d in df]
df = (np.array(df))
column = data[0][:-6]
for string in (df):
df = string.split()
print df
但问题是,当我检查2月的数据时,它提供了31个数据。我试图解决但无法做到。
任何人都可以帮忙解决这个问题吗? 我还附上了数据文件。 https://drive.google.com/file/d/0B2rkXkOkG7ExTlJ3VnExUHFZUzA/view?usp=sharing
答案 0 :(得分:2)
你应该使用大熊猫的Fixed Width File读者:
因此,对于输入文件,您已定义固定宽度列表:
#Define the column widths
ws = [4,9,7,7,7,7,7,7,7,7,7,7,7]
#read the file having the header row in the 9th line and read only 31 lines after that
df = pd.read_fwf('AQ404.7_01.txt',widths=ws,header=9, nrows=31)
print df
答案 1 :(得分:1)
我将您的示例复制粘贴到我的case $git_remote_status in
behind) #git pull and stuff....
;;
up-to-date | ahead) # echo "nothing to do"...
;;
*) echo "unexpected output, please see 'git status -uno'"
;;
esac
会话中作为多行文字并运行以下ipython
:
genfromtxt
我必须指定In [281]: np.genfromtxt(txt.splitlines(),dtype=None,names=True,usecols=range(13))
Out[281]:
array([(1, 15.2, 12.3, 9.96, 10.1, 15.0, 33.7, 137, 309, 182, 62.6, 27.4, 17.2),
(2, 14.9, 12.3, 9.96, 9.96, 16.4, 38.2, 109, 342, 197, 69.9, 25.4, 16.6),
(3, 14.9, 12.3, 9.78, 10.3, 17.3, 50.3, 118, 472, 184, 68.7, 24.5, 17.0),
(4, 14.6, 12.3, 9.69, 10.3, 18.7, 58.1, 152, 275, 190, 68.7, 24.5, 16.6),
(5, 14.4, 12.3, 9.51, 10.1, 18.9, 44.5, 165, 188, 206, 69.9, 24.0, 16.5),
(6, 14.1, 12.3, 9.41, 10.3, 19.8, 44.8, 142, 157, 192, 62.2, 23.8, 16.1),
(7, 14.0, 12.3, 9.32, 10.3, 20.4, 52.6, 121, 146, 182, 58.9, 24.9, 15.6)],
dtype=[('Day', '<i4'), ('Jan', '<f8'), ('Feb', '<f8'), ('Mar', '<f8'), ('Apr', '<f8'), ('May', '<f8'), ('Jun', '<f8'), ('Jul', '<i4'), ('Aug', '<i4'), ('Sep', '<i4'), ('Oct', '<f8'), ('Nov', '<f8'), ('Dec', '<f8')])
,因为标题中有14个名称,但数据行中只有13个字段。
请注意,它加载了1d结构化数组。通过字段名称访问列,例如usecols
,而不是数字。 data['Jan']
将来自第二个数据线的数据。
如果我跳过标题行,我可以将它作为2d浮点数组加载
data[1]
在scatch工作时,我可以将这些行转换为列表:
In [284]: np.genfromtxt(txt.splitlines(),dtype=float,skip_header=1)
Out[284]:
array([[ 1. , 15.2 , 12.3 , 9.96, 10.1 , 15. , 33.7 ,
137. , 309. , 182. , 62.6 , 27.4 , 17.2 ],
[ 2. , 14.9 , 12.3 , 9.96, 9.96, 16.4 , 38.2 ,
109. , 342. , 197. , 69.9 , 25.4 , 16.6 ],
[ 3. , 14.9 , 12.3 , 9.78, 10.3 , 17.3 , 50.3 ,
118. , 472. , 184. , 68.7 , 24.5 , 17. ],
[ 4. , 14.6 , 12.3 , 9.69, 10.3 , 18.7 , 58.1 ,
152. , 275. , 190. , 68.7 , 24.5 , 16.6 ],
[ 5. , 14.4 , 12.3 , 9.51, 10.1 , 18.9 , 44.5 ,
165. , 188. , 206. , 69.9 , 24. , 16.5 ],
[ 6. , 14.1 , 12.3 , 9.41, 10.3 , 19.8 , 44.8 ,
142. , 157. , 192. , 62.2 , 23.8 , 16.1 ],
[ 7. , 14. , 12.3 , 9.32, 10.3 , 20.4 , 52.6 ,
121. , 146. , 182. , 58.9 , 24.9 , 15.6 ]])
我可以获得一个浮动列表列表:
ll = []
for line in txt.splitlines():
ll.append(line.strip().split())
可以用
转换成2d数组for line in txt.splitlines()[1:]: # skip the header
ll.append([float(i) for i in line.strip().split()])
如果空格分隔符不起作用,np.array(ll)
也接受字段宽度列表作为“分隔符”。查看其文档或实验。