如何将具有多个键值对的CSV文件一行转换为具有键作为列的数据帧

时间:2017-04-04 18:49:28

标签: python csv pandas

我正在尝试使用panda来转换csv。 我有* .csv文件看起来像:

header1,value1,header2,value2,header3,value3,header4,value4  
header2,value2,header3,value3  
header1,value1,header2,value2  
header1,value1,header3,value3,header4,value4  

我想要一个新的csv,如:

header1,header2,header3,header4  
value1,value2,value3,value4  
,value2,value3,  
value1,value2,,  
value1,,value3,value4 

代码的开头看起来像:

import csv
import pandas as pd

# Read the file
df = pd.read_csv('in.csv')
df_data = df[1,9]

SOME CODE

df_data.to_csv('output.csv')

谢谢,

1 个答案:

答案 0 :(得分:0)

加载没有标题的数据,以便将其全部保存在数据框中:

df=pd.read_csv('foobar.txt', sep=',', header=None)

然后将其重新整形为一个系列,但保持0级索引以从原始csv获取行编号:

s = df.stack()
s.index = s.index.droplevel(-1)

s
Out[92]: 
0     header1
0      value1
0     header2
0      value2
0     header3
0      value3
0     header4
0    value4  
1     header2
1      value2
...

现在将此系列​​的奇数和偶数字段连接到数据帧,将标题列添加到索引并将其取消堆栈:

pd.concat([s[::2], s[1::2]], axis=1).set_index(0, append=True).unstack(1)
Out[104]: 
        1                              
0 header1   header2   header3   header4
0  value1    value2    value3  value4  
1    None    value2  value3        None
2  value1  value2        None      None
3  value1      None    value3  value4