我在每行中都有一个可变长度的字符串数组,其中列标签在字符串内容中表示。但是,列的大小是可变的,并且可能很大。如何将这种格式转换为数据框? 例如
输入:
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
答案 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])