Python 将文本导入数据框,使用shift,执行操作,保存到文本

Python 将文本导入数据框,使用shift,执行操作,保存到文本,python,pandas,Python,Pandas,我有一个两列135001行的文本文件。第一列是振幅,第二列是相关时间。我想保存一些振幅从零变为非零的文件行。为此,我使用了一个想法,当我用一个小的简单数据(我在代码中生成的数据)测试代码时,它工作得很好,但用我的原始数据它不工作。可能问题与读取数据有关。我拥有的简单数据如下: 0 11 2 12 3 13 1 14 0 15 1 16 0 17 0 18 输出应为: 2 12 1 16 我可以使用以下代码执行此操作: >>> import pandas as pd >

我有一个两列135001行的文本文件。第一列是振幅,第二列是相关时间。我想保存一些振幅从零变为非零的文件行。为此,我使用了一个想法,当我用一个小的简单数据(我在代码中生成的数据)测试代码时,它工作得很好,但用我的原始数据它不工作。可能问题与读取数据有关。我拥有的简单数据如下:

0 11
2 12
3 13
1 14
0 15
1 16
0 17
0 18
输出应为:

2 12
1 16
我可以使用以下代码执行此操作:

>>> 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
但当我想将其应用于我的数据文件(文本文件)时,输出将是一个空文件:

b= open ("39-1+2.txt", "r")
df= pd.DataFrame(b)
df['shift'] = df[0].shift(1)
df[(df['shift']==0) & (df[0] > df['shift'])].drop(columns=['shift'])
df.to_csv('test1.txt', index=False, header=None)
这是我的一些数据行,它们都与此类似

0.000000 00:04:07.680000
0.000000 00:04:08.320000
0.000002 00:04:08.960000
0.000002 00:04:09.600000
0.000000 00:04:10.240000
0.000000 00:04:10.880000
0.000000 00:04:11.520000

你做的一切都是对的,你只需要做一个非常微小的改变:

df = pd.read_csv('test1.txt', delimiter = ' ', header = None)
df= pd.DataFrame(b)
df['shift'] = df[0].shift(1)
# assign the new dataframe to df
df = df[(df['shift']==0) & (df[0] > df['shift'])].drop(columns=['shift'])
df.to_csv('test1.txt', index=False, header=None)
您只需要将该值重新分配给df。 编辑:


你做的一切都是对的,你只需要做一个非常微小的改变:

df = pd.read_csv('test1.txt', delimiter = ' ', header = None)
df= pd.DataFrame(b)
df['shift'] = df[0].shift(1)
# assign the new dataframe to df
df = df[(df['shift']==0) & (df[0] > df['shift'])].drop(columns=['shift'])
df.to_csv('test1.txt', index=False, header=None)
您只需要将该值重新分配给df。 编辑:


我用了这个。现在输出文件完全为空。所以这行可能有问题,但我不明白问题在哪里:df=df[(df['shift']==0)&(df[0]>df['shift'])。删除(columns=['shift']),然后我需要看看
b
的样子。还有,为什么不使用
b=pd.read\u csv(“39-1+2.txt”,skiprows=n,header=None)
?其中
n
是要跳过的行数(如果有),如果文件仅包含数据,则
标题
标记否。确定。我用过这个,但输出仍然是空的。我认为问题在于它正在逐列读取数据。看起来它把所有的数据都读成了一列。谢谢你,现在一切正常。所以我的问题是关于转移?我没有设置“时段=1,填充值=0”。这就是问题所在?很可能是的。但对我来说,即使没有它,它也可以正常工作,所以它也可能是你读取文件的方式。注意:我使用了
delimiter='
,这可能也是问题所在。我应用了这个。现在输出文件完全为空。所以这行可能有问题,但我不明白问题在哪里:df=df[(df['shift']==0)&(df[0]>df['shift'])。删除(columns=['shift']),然后我需要看看
b
的样子。还有,为什么不使用
b=pd.read\u csv(“39-1+2.txt”,skiprows=n,header=None)
?其中
n
是要跳过的行数(如果有),如果文件仅包含数据,则
标题
标记否。确定。我用过这个,但输出仍然是空的。我认为问题在于它正在逐列读取数据。看起来它把所有的数据都读成了一列。谢谢你,现在一切正常。所以我的问题是关于转移?我没有设置“时段=1,填充值=0”。这就是问题所在?很可能是的。但对我来说,即使没有它,它也可以正常工作,所以它也可能是你读取文件的方式。注意:我使用了
delimiter='
,这可能也是问题所在。请告诉我们有关输入文件的更多信息。它看起来像什么?它是如何界定的?我猜关于保存文件中的空行只是因为您需要调用
reset\u index()
告诉我们有关输入文件的更多信息。它看起来像什么?它是如何界定的?我猜测,保存文件中的空行只是因为需要调用
reset\u index()