首页 > 解决方案 > 如何减少文本文件中列的所有元素?

问题描述

我有一个包含两列和 135001 行的文本文件。第一列是幅度,第二列是相关时间。我需要查看第一列并了解幅度增加和再次减少的位置,并且我需要提取相关时间。实际上我应该从第一列派生一个。当幅度增加时,我应该数一,然后我应该等到幅度达到零,然后再次执行此过程。正如我提到的,我也需要相关的时间。这是我正在考虑的非常原始的代码,我知道这不是真的,但我不知道如何完成它。对于第一步,我在减少第一列中的行时遇到了问题,并且出现了这个错误“str 无法转换为浮点数”。

n=0
with open('39-1+2.txt',"r") as f
for line in f

    data=line.split(' ')[0]
    time=line.split(' ')[1]

    with open ('grad-time.txt', 'w') as s:
        for i in range (0, 135001):
        if
        d= float(data[i+1])-float (data[i])>0
        n=n+1
        s.write("{}\n".format(d))
        wait
        float(data [i]= 0.0)
        continue

例如,我有这个文件:

0 11
2 12
3 13
1 14
0 15
1 16
0 17
0 18

输出应该是这样的:

2 12
1 16

标签: pythondatabasetext

解决方案


由于您想使用前一行的值来决定当前行,您可以使用 pandas' shift。这将允许您创建一个新列来保存前一行的值。

使用该逻辑,您只需要检查前一行是否为 0,并且当前值是否高于该值。

>>> import pandas as pd
>>> df = pd.DataFrame([[0,11],[2,12],[3,13],[1,14],[0,15],[1,16],[0,17],[0,18]])
>>> df['shift'] = df[0].shift(1)
>>> df
   0   1  shift
0  0  11    NaN
1  2  12    0.0
2  3  13    2.0
3  1  14    3.0
4  0  15    1.0
5  1  16    0.0
6  0  17    1.0
7  0  18    0.0
>>> df[(df['shift']==0) & (df[0] > df['shift'])].drop(columns=['shift'])
   0   1
1  2  12
5  1  16

推荐阅读