我有两个数组,即nlxTTL和ttlState。这两个阵列都由指示输入电压的0和1的重复模式组成,它们可以是HIGH(1)或LOW(0),并且是从发送1秒钟脉冲宽度的TTL脉冲(高和低)的同一源记录下来的。

但是由于某些记录错误,ttlState列表中发生了一些删除操作,即它没有记录重复的0和1序列并且最终导致丢弃值。

好部分是我还为两个列表接收的每个TTL输入记录了时间戳。 TTL事件之间的时间戳差异清楚地表明TTL事件已丢失脉冲之一。

这是数据的示例:

nlxTTL, ttlState, nlxTime, ttlTime
0,0,1000,1000
1,1,2000,2000
0,1,3000,4000
1,1,4000,6000
0,0,5000,7000
1,1,6000,8000
0,0,7000,9000
1,1,8000,10000


如您所见,nlxTime和ttlTime显然彼此不同。然后如何使用这些时间戳来对齐所有4个列表?

最佳答案

处理诸如CSV文件之类的表格数据时,最好使用一个库来简化此过程。我喜欢pandas数据框库。

现在,对于您的问题,考虑这个问题的一种方法是您确实有两个数据集...一个nlx数据集和一个ttl数据集。您想通过时间戳将这些数据集连接在一起。熊猫使这样的任务非常容易。

import pandas as pd
from StringIO import StringIO

data = """\
nlxTTL, ttlState, nlxTime, ttlTime
0,0,1000,1000
1,1,2000,2000
0,1,3000,4000
1,1,4000,6000
0,0,5000,7000
1,1,6000,8000
0,0,7000,9000
1,1,8000,10000
"""

# Load data into dataframe.
df = pd.read_csv(StringIO(data))

# Remove spaces from column names.
df.columns = [x.strip() for x in df.columns]

# Split the data into an nlx dataframe and a ttl dataframe.
nlx = df[['nlxTTL', 'nlxTime']].reset_index()
ttl = df[['ttlState', 'ttlTime']].reset_index()

# Merge the dataframes back together based on their timestamps.
# Use an outer join so missing data gets filled with NaNs instead
# of just dropping the rows.
merged_df = nlx.merge(ttl, left_on='nlxTime', right_on='ttlTime', how='outer')

# Get back to the original set of columns
merged_df = merged_df[df.columns]

# Print out the results.
print(merged_df)


这将产生以下输出。

   nlxTTL  ttlState  nlxTime  ttlTime
0     0.0       0.0   1000.0   1000.0
1     1.0       1.0   2000.0   2000.0
2     0.0       NaN   3000.0      NaN
3     1.0       1.0   4000.0   4000.0
4     0.0       NaN   5000.0      NaN
5     1.0       1.0   6000.0   6000.0
6     0.0       0.0   7000.0   7000.0
7     1.0       1.0   8000.0   8000.0
8     NaN       0.0      NaN   9000.0
9     NaN       1.0      NaN  10000.0


您会注意到,由于我们正在执行外部联接,因此它使用NaN值填充了被删除的值。如果不希望这样做,请将how='outer'参数更改为how='inner'以执行内部联接。这只会保留在该时间戳记中同时具有nlx和ttl响应的记录。

关于python - 根据其他2个列表对齐2个python列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42042076/

10-12 17:00