我有一个无法更改的CSV格式。该文件具有多索引。该文件如下所示。
最终目标是将第一行(小时)转换为索引,并使用“ ID”列对其进行索引,以便数据看起来像这样。
我已将档案汇入熊猫...
myfile = 'c:/temp/myfile.csv'
df = pd.read_csv(myfile, header=[0, 1], tupleize_cols=True)
pd.set_option('display.multi_sparse', False)
df.columns = pd.MultiIndex.from_tuples(df.columns, names=['hour', 'field'])
df
但这给了我三个未命名的字段:
我的最后一步是按小时堆叠:
df.stack(level=['hour'])
但是我错过了之前的内容,即使在它们上面有空白的多索引行,也可以在其中索引其他列。
我相信您缺少的行可能是#3和4:
df = pd.io.parsers.read_csv('temp.csv', header = [0,1], tupleize_cols = True)
df.columns = [c for _, c in df.columns[:3]] + [c for c in df.columns[3:]]
df = df.set_index(list(df.columns[:3]), append = True)
df.columns = pd.MultiIndex.from_tuples(df.columns, names = ['hour', 'field'])
执行之后stack
,您可以根据需要重置索引。
例如
之前
(Unnamed: 0_level_0, Date) (Unnamed: 1_level_0, id) \
0 3/11/2016 5
1 3/11/2016 6
(Unnamed: 2_level_0, zone) (100, p1) (100, p2) (200, p1) (200, p2)
0 abc 0.678 0.787 0.337 0.979
1 abc 0.953 0.559 0.776 0.520
后
field p1 p2
Date id zone hour
0 3/11/2016 5 abc 100 0.678 0.787
200 0.337 0.979
1 3/11/2016 6 abc 100 0.953 0.559
200 0.776 0.520
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句