我有一个带有标题和气象数据的时间序列文件,如下所示:
“ NAME:时间序列结果
LOC_I:130
LOC_J:181
LAT:-9.03
LON:-35.22
单位:秒
SECONDS YY MM DD hh mm ss wind_x wind_y hourly_prec rel_hum
| BeginResults |
0 2007 1 1 0 0 0 1.2 0.5 0 97.5
3600 2007 1 1 1 0 0 2.3 0.7 0 97.6
7200 2007 1 1 2 0 0 2.6 0.7 0 97.5
10800 2007 1 1 3 0 0 1.9 0.6 0 97.4
...
| EndResults |“
我需要将数值数据作为大熊猫数据框导入,并将第[6]行中的信息作为列,因此我必须删除[0:5],[7]和[-1]行,但是在简单的python代码中无法成功处理此问题,您能帮我吗?
答案 0 :(得分:0)
假设您只想删除前N行,为什么不只是将整个csv(是csv?)作为DataFrame导入,然后删除前N,或者将要保留的行重新分配到新的DataFrame中,用iloc属性?喜欢:
In [21]: df
Out[21]:
A B C D
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
In [24]: df1 = df.iloc[1:,:]
In [25]: df1
Out[25]:
A B C D
1 4 5 6 7
2 8 9 10 11
答案 1 :(得分:0)
尝试一下:
import pandas as pd
pd.read_csv("/path/to/file",
sep=" ",
header=6,
skiprows=[0, 1, 2, 3, 4, 5, 7],
engine="python",
skipfooter=1)
sep
使其使用空格作为分隔符来拆分列。根据文档,看起来这也可以使用正则表达式,但是我从未尝试过。
header
使数据框使用第6行(索引为0)作为列名。
skiprows
告诉熊猫您要跳过的行。除了行索引列表之外,您还可以给它一个int(从开始到跳过的行数)或一个可调用的(如果它的值为True,则跳过该行)。如果需要,请在链接的文档中获取更多详细信息。
engine
确定它使用的引擎。这是必需的,因为python引擎仅支持skipfooter
。
skipfooter
告诉您要从底部跳过多少行。
read_csv()
的完整文档为here,如果您需要在解析中添加更多限制,则此文档非常详尽。
答案 2 :(得分:0)
尝试一下:
import pandas as pd
import os
str_data = """"NAME: Timeseries results
LOC_I: 130
LOC_J: 181
LAT: -9.03
LON: -35.22
UNITS: SECONDS
SECONDS YY MM DD hh mm ss wind_x wind_y hourly_prec rel_hum
|BeginResults|
0 2007 1 1 0 0 0 1.2 0.5 0 97.5
3600 2007 1 1 1 0 0 2.3 0.7 0 97.6
7200 2007 1 1 2 0 0 2.6 0.7 0 97.5
10800 2007 1 1 3 0 0 1.9 0.6 0 97.4
|EndResults|"""
text = os.linesep.join([s for s in str_data.splitlines() if s])
list_data = text.split('\n')
weather_data_header = list_data[6].split()
weather_data = [row.split() for row in list_data[8:len(list_data)-1]]
df = pd.DataFrame(weather_data, columns=weather_data_header)
df.head()