我对pandas还不熟悉,我正在尝试将一个格式奇怪的文件读入数据帧。 原始文件如下所示:
; No Time Date MoistAve MatTemp TDRConduct TDRAve DeltaCount tpAve Moist1 Moist2 Moist3 Moist4 TDR1 TDR2 TDR3 TDR4
1 11:38:17 11.07.2012 11.37 48.20 5.15 88.87 15 344.50 11.84 11.35 11.59 15.25 89.0 89.0 89.0 88.0
2 11:38:18 11.07.2012 11.44 48.20 5.13 88.88 2 346.22 12.08 11.83 -1.00 -1.00 89.0 89.0 -1.0 -1.0
3 11:38:19 11.07.2012 11.10 48.20 4.96 89.00 3 337.84 11.83 11.59 10.62 -1.00 89.0 89.0 89.0 -1.0
4 11:38:19 11.07.2012 11.82 48.20 5.54 88.60 3 355.92 11.10 13.54 12.32 -1.00 89.0 88.0 88.0 -1.0
我设法得到了一个结构相同的数据帧:
^{pr2}$但是现在我必须扩展这个数据帧的每一行
.... Moist1 Moist2 Moist3 Moist4 TDR1 TDR2 TDR3 TDR4
1 .... 11.84 11.35 11.59 15.25 89 89 89 88
2 .... 12.08 11.83 NaN NaN 89 89 NaN NaN
分成四行(包含三个索引No、FetchTime和MeasureNo):
.... Moist TDR
No FetchTime MeasureNo
0 2012-11-07 11:38:17 1 .... 11.84 89 # from line 1, Moist1 and TDR1
1 2 .... 11.35 89 # from line 1, Moist2 and TDR2
2 3 .... 11.59 89 # from line 1, Moist3 and TDR3
3 4 .... 15.25 88 # from line 1, Moist4 and TDR4
4 2012-11-07 11:38:18 1 .... 12.08 89 # from line 2, Moist1 and TDR1
5 2 .... 11.83 89 # from line 2, Moist2 and TDR2
6 3 .... NaN NaN # from line 2, Moist3 and TDR3
7 4 .... NaN NaN # from line 2, Moist4 and TDR4
通过保留其他列和最重要的列,保持条目的顺序。我
我知道我可以用for row in df.iterrows(): ...
遍历每一行,但我读到的是
不是很快。我的第一个方法是:
In [54]: data = []
In [55]: for d in range(1,5):
....: temp = df.ix[:, ['FetchTime', 'MoistAve', 'MatTemp', 'TDRConduct', 'TDRAve', 'DeltaCount', 'tpAve', 'Moist%d' % d, 'TDR%d' % d]]
....: temp.columns = ['FetchTime', 'MoistAve', 'MatTemp', 'TDRConduct', 'TDRAve', 'DeltaCount', 'tpAve', 'RawMoist', 'RawTDR']
....: temp['MeasureNo'] = d
....: data.append(temp)
....:
In [56]: test = pd.concat(data, ignore_index=True)
In [62]: test.head()
Out[62]:
FetchTime MoistAve MatTemp TDRConduct TDRAve DeltaCount tpAve RawMoist RawTDR MeasureNo
0 2012-11-07 11:38:17 11.37 48.2 5.15 88.87 15 344.50 11.84 89 1
1 2012-11-07 11:38:18 11.44 48.2 5.13 88.88 2 346.22 12.08 89 1
2 2012-11-07 11:38:19 11.10 48.2 4.96 89.00 3 337.84 11.83 89 1
3 2012-11-07 11:38:19 11.82 48.2 5.54 88.60 3 355.92 11.10 89 1
4 2012-11-07 11:38:20 12.61 48.2 5.87 88.38 3 375.72 12.80 89 1
但我看不出有什么方法可以影响连接来获得我需要的顺序。。。 有没有其他方法可以得到我需要的结果数据帧?在
这里有一个基于numpy的repeat和数组索引来构建去堆叠的值,pandas的merge来输出连接的结果。在
首先将数据样本加载到数据帧中(稍微改变read_cv的参数)。在
然后构建TDRs的去叠加向量,并将其与原始数据帧合并
^{pr2}$在期望的输出下:
这使得测试中的第四行从“i”开始:
使用与上面相同的基本循环,只需在运行上面的代码之后,附加从0到3开始的第四行的集合。在
^{pr2}$更新: 我现在意识到你想要的不是每四行而是每一个月,所以这只是上面的循环建议。对不起的。在
更新2: 也许不是。我们可以利用这样一个事实:即使concatenate不返回您想要的顺序,它返回的内容与您想要的内容有固定的映射关系。d是每个时间戳的行数,m是时间戳的数目。在
您似乎希望test中的行如下所示: [0,m,2m,3m,1,m+1,2m+1,3m+1,2,m+2,2m+2,3m+2,…,m-1,2m-1,3m-1,4m-1]
我确信有更好的方法来生成这个索引列表,但这对我很有效
相关问题 更多 >
编程相关推荐