我有一个字符串列表,如下所示:
input = ["number__128_alg__hello_min_n__7_max_n__9_full_seq__True_random_color__False_shuffle_shapes__False.pkl", "k__9_window__10_number__128_overlap__True_alg__hi_min_n__7_max_n__9_full_seq_embedding__False_random_color__False_shuffle_shapes__False.pkl", "k__9_window__10_number__128_overlap__True_alg__what_random_color__False_shuffle_shapes__False.pkl"]
这些字符串的格式是参数名称后跟“__”,然后是参数值。在参数值之后,在下一个参数名称之前有一个_。值得注意的是,一些参数名称中包含_(例如“random_shape”。每个字符串都有不同的参数,但是有重叠。因此,我想创建一个数据框,每个参数名称作为一列,每个row是与input
列表的每个元素对应的值。如果列表中的特定值没有参数,则数据框应包含NA或NaN或任何内容。
如何做到这一点?
谢谢!
编辑:如果原始列表无法完成,那么:
input = ["number__128_alg__hello_min.n__7_max.n__9_full.seq__True_random.color__False_shuffle.shapes__False.pkl", "k__9_window__10_number__128_overlap__True_alg__hi_min.n__7_max.n__9_full.seq__False_random.color__False_shuffle.shapes__False.pkl", "k__9_window__10_number__128_overlap__True_alg__what_random.color__False_shuffle.shapes__False.pkl"]
答案 0 :(得分:2)
如果您假设值不能包含_
字符(也假设您最终要丢弃.pkl
),则可以这样做。
input = [
"number__128_alg__hello_min_n__7_max_n__9_full_seq_embedding__True_random_color__False_shuffle_shapes__False.pkl",
"k__9_window__10_number__128_overlap__True_alg__hi_min_n__7_max_n__9_full_seq_embedding__False_random_color__False_shuffle_shapes__False.pkl",
"k__9_window__10_number__128_overlap__True_alg__what_random_color__False_shuffle_shapes__False.pkl"
]
一个简单的正则表达式可以解决这个问题:
import re
data = [dict(re.findall(r"([^_].*?)__([^_]+)", _[:-4])) for _ in input]
print(data)
结果:
[{'number': '128',
'alg': 'hello',
'min_n': '7',
'max_n': '9',
'full_seq_embedding': 'True',
'random_color': 'False',
'shuffle_shapes': 'False'},
{'k': '9',
'window': '10',
'number': '128',
'overlap': 'True',
'alg': 'hi',
'min_n': '7',
'max_n': '9',
'full_seq_embedding': 'False',
'random_color': 'False',
'shuffle_shapes': 'False'},
{'k': '9',
'window': '10',
'number': '128',
'overlap': 'True',
'alg': 'what',
'random_color': 'False',
'shuffle_shapes': 'False'}]
作为数据框:
import pandas as pd
pd.DataFrame(data)