我有一个近800k行的数据集。应该只有大约6k个具有多列数据的不同记录。问题是,每个记录都被视为一个表。例如:
header data
id 238
name machine_one
serial 1234556
purchase_date 11/19/2010
status good
id 239
name machine_two
serial 3456789
purchase_date 11/19/2020
status bad
id 240
name machine_six
serial 1122334
purchase_date 11/19/2019
status fair
注:每条记录包含不同数量的数据点。我用五个作为例子,但有些有30个,有些有12个,以此类推;NEWRECORD***";表示新条目的行。
我把它清理了一些,它都是一根没有结构的绳子。交叉表会是我想要的吗?非常感谢任何提示。
给定以上数据:
import pandas as pd
data=[{'header': 'id', 'data': '238'},
{'header': 'name', 'data': 'machine_one'},
{'header': 'serial', 'data': '1234556'},
{'header': 'purchase_date', 'data': '11/19/2010'},
{'header': 'status', 'data': 'good'},
{'header': 'id', 'data': '239'},
{'header': 'name', 'data': 'machine_two'},
{'header': 'serial', 'data': '3456789'},
{'header': 'purchase_date', 'data': '11/19/2020'},
{'header': 'status', 'data': 'bad'},
{'header': 'id', 'data': '240'},
{'header': 'name', 'data': 'machine_six'},
{'header': 'serial', 'data': '1122334'},
{'header': 'purchase_date', 'data': '11/19/2019'},
{'header': 'status', 'data': 'fair'}]
df = pd.DataFrame(data)
你能假设每条记录是5行吗?如果是,那么你可以这样做:
## create record index column
record = pd.DataFrame(pd.Series(range(len(df)//5)).repeat(5)).reset_index(drop=True)
## concatenate it horizontally to your file:
df = pd.concat([df, record], axis=1).rename(columns={0:'record'})
### pivot the result and cleanup index headings:
df = df.pivot(columns='header', index='record').copy().reset_index(drop=True)
df.columns = df.columns.get_level_values(1)
df.columns.name = None
print(df)
输出:
id name purchase_date serial status
0 238 machine_one 11/19/2010 1234556 good
1 239 machine_two 11/19/2020 3456789 bad
2 240 machine_six 11/19/2019 1122334 fair