我有两个数组,即 nlxTTL 和 ttlState 。两个阵列都包含0和1的重复模式,表示输入电压可以是HIGH(1)或LOW(0),并从相同的源记录,发送TTL脉冲(HIGH和LOW),脉冲宽度为1秒。
但由于某些日志记录错误,在 ttlState 列表中会发生一些丢弃,即它不会记录0和1的重复序列,最终会丢弃值。
好的部分是我还记录了两个列表收到的每个TTL输入的时间戳。 Inter 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个列表?
答案 0 :(得分: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响应的记录。