我有一个文件,其数据与此类似:
[START]
Name = Peter
Sex = Male
Age = 34
Income[2020] = 40000
Income[2019] = 38500
[END]
[START]
Name = Maria
Sex = Female
Age = 28
Income[2020] = 43000
Income[2019] = 42500
Income[2018] = 40000
[END]
[START]
Name = Jane
Sex = Female
Age = 41
Income[2020] = 60500
Income[2019] = 57500
Income[2018] = 54000
[END]
我想将此数据读入pandas数据框中,以便最终与之类似
Name Sex Age Income[2020] Income[2019] Income[2018]
Peter Male 34 40000 38500 NaN
Maria Female 28 43000 42500 40000
Jane Female 41 60500 57500 54000
到目前为止,我仍无法弄清楚这是否是标准数据文件格式(它与JSON有一些相似之处,但仍然非常不同)。 是否有一种优雅而又快速的方式将这些数据读取到数据帧?
答案 0 :(得分:3)
优雅,我不知道,但是简单的方法,是的。 Python非常擅长解析简单格式的文本。
在这里,[START]
开始一个新记录,[END]
结束它,并且在一条记录中,您有key = value
行。您可以轻松地构建自定义解析器来生成记录列表,以将其馈入熊猫DataFrame:
inblock = False
fieldnames = []
data = []
for line in open(filename):
if inblock:
if line.strip() == '[END]':
inblock = False
elif '=' in line:
k, v = (i.strip() for i in line.split('=', 1))
record[k] = v
if not k in fieldnames:
fieldnames.append(k)
else:
if line.strip() == '[START]':
inblock = True
record = {}
data.append(record)
df = pd.DataFrame(data, columns=fieldnames)
df
符合预期:
Name Sex Age Income[2020] Income[2019] Income[2018]
0 Peter Male 34 40000 38500 NaN
1 Maria Female 28 43000 42500 40000
2 Jane Female 41 60500 57500 54000