我有两个数组,即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/