将可变长度字符串数组转换为数据帧

时间:2019-08-12 16:01:24

标签: python numpy dataframe

我在每行中都有一个可变长度的字符串数组,其中列标签在字符串内容中表示。但是,列的大小是可变的,并且可能很大。如何将这种格式转换为数据框? 例如

输入:

np.array([['Hour: 1', 'Name: EVENT_1', 'Column1: A'],
      ['Hour: 2', 'Name: EVENT_2', 'Column1: B','Column2: BCX'],
      ['Hour: 2', 'Name: EVENT_2', 'Column1: C','Column3: BCY','Column4: BCE'],
      ['Hour: 4', 'Name: EVENT_4','Column1: D',  'Column3: BCZ'],
      ['Hour: 5','Name: EVENT_5','Column2: BC', 'Column99: BCR' ,'Column100: BCA']
     ])

预期输出:

Hour |  Name     |Column1|Column2|Column3|Column4...Column99|Column100
1    |  EVENT_1  |  AA   | BCX   |       |       ...        | 
2    |  EVENT_2  |  BQ   |       |       | BCE    ...       | 
3    |  EVENT_3  |  CW   |       | BCY   |       ...        | 
4    |  EVENT_4  |  DF   |       | BCZ   |       ...        |   
5    |  EVENT_5  |       | BC    |       |       ...    BCR |   BCA

1 个答案:

答案 0 :(得分:1)

Ola,欢迎来到堆栈溢出

AS @jirassimok提到您需要迭代来构造字典。这是一段可能有帮助的代码:

#Array to collect all rows
new_array=[]
#For every row
for r in rows:
    #Array to collect new row
    new_row={}
    #For every "column: value" pair convert to dictionary
    for c_v in r:
        #Add all values to their column
        new_row[c_v.split(': ')[0]]=c_v.split(': ')[1]
    new_array+=[new_row]
pd.DataFrame(new_array)   

如果您确实需要节省空间,则可以使用字典和列表理解功能

将以上内容转换为一行
pd.DataFrame([{x.split(': ')[0]:x.split(': ')[1] for x in r} for r in rows])