我们有保存 IOT 数据的 TSV 文件,想要使用 pandas 转换为表状结构。我研究过 TSV 数据,类似于下面给出的,逻辑是这样的
正如所解释的那样,这有点具有挑战性,col1 到 col3 是维度数据,其余的是事实数据
tsv 文件数据如下
col1 qweqweq
第 2 栏 345435
第三栏 01/01/2024 35:08:09
第 4 栏 1
第 5 栏 0
第 4 栏 0
第 5 栏 0
第 4 栏 1
第 5 栏 1
第 4 栏 0
第 5 栏 1
想要投影为类似表格的结构
col1 | col2 | col3 | col4 | 第5栏 |
---|---|---|---|---|
qweqweq | 345435 | 2024年1月1日35:08:09 | 1 | 0 |
qweqweq | 345435 | 2024年1月1日35:08:09 | 0 | 0 |
qweqweq | 345435 | 2024年1月1日35:08:09 | 1 | 1 |
qweqweq | 345435 | 2024年1月1日35:08:09 | 0 | 1 |
每个 IOT 文件中的 col4 和 col5 可能不同。如何用python、pandas实现?
pivot
,并且groupby.ffill
:
df = (pd.read_csv('your_file.tsv', sep='\t', header=None)
.assign(index=lambda x: x[0].eq('col1').cumsum(),
n=lambda x: x.groupby(['index', 0]).cumcount())
.pivot(index=['index', 'n'], columns=0, values=1)
.groupby(level='index').ffill()
.reset_index(drop=True)
)
输出:
col1 col2 col3 col4 col5
0 qweqweq 345435 01/01/2024 35:08:09 1 0
1 qweqweq 345435 01/01/2024 35:08:09 0 0
2 qweqweq 345435 01/01/2024 35:08:09 1 1
3 qweqweq 345435 01/01/2024 35:08:09 0 1