我想将pandas系列分为键和值对。我的程序正在将它转换为键和值对,但我希望这个键和值格式良好。
输入文本文件包含以下数据:
INPUT.TXT -
3=123|4=88|5=M|8=75|9=29
3=38|4=13|5=I|8=17.3|9=10|1021=0|854=p|394=7.73|474=7.7477558
程序编码 -
df = pd.read_csv(inputfile, index_col=None, names=['text'])
df_list = df.values.T.tolist()
s = df.text.str.split('|')
splited_list = s.values.T.tolist()
s1 = pd.Series(splited_list)
ds = [dict(w.split('=', 1) for w in x) for x in s1]
p = pd.DataFrame.from_records(ds)
p1 = p.replace(np.nan,'n/a', regex=True)
st = p1.stack(level=0,dropna=False)
dfs = [g for i, g in st.groupby(level=0)]
dfs_length = len(dfs)
i = 0
while i < dfs_length:
#index of each column
print '\nindex[%d]'%i
for k,v in dfs[i].iteritems():
print k,' : ',v
i = i + 1
这会产生以下输出:
输出 -
index[0]
(0, '1021') : n/a
(0, '3') : 123
(0, '394') : n/a
(0, '4') : 88
(0, '474') : n/a
(0, '5') : M
(0, '8') : 75
(0, '854') : n/a
(0, '9') : 29
index[1]
(1, '1021') : 0
(1, '3') : 38
(1, '394') : 7.73
(1, '4') : 13
(1, '474') : 7.7477558
(1, '5') : I
(1, '8') : 17.3
(1, '854') : p
(1, '9') : 10
我想要其他格式的输出。我希望在每个结果的最后都有这个不适用的内容,如果存在,我想删除键的索引和括号。输出内容也应与输入文件中可用的顺序相同。
预期产出:
index[0]
3 123
4 88
5 M
8 75
9 29
1021 n/a
394 n/a
474 n/a
854 n/a
index[1]
3 38
4 13
5 I
8 17.3
9 10
1021 0
854 p
394 7.73
474 7.7477558
有关如何获得此类输出的任何建议?
答案 0 :(得分:0)
我可以回答你问题的一半。要删除括号和索引,您需要稍微调整代码,例如:
i = 0
while i < len(dfs):
#index of each column
print ('\nindex[%d]'%i)
for (_,k),v in dfs[i].iteritems():
print (k,' : ',v)
i = i + 1
结果如下:
index[0]
1021 : n/a
3 : 123
394 : n/a
4 : 88
474 : n/a
5 : M
8 : 75
854 : n/a
9 : 29
index[1]
1021 : 0
3 : 38
394 : 7.73
4 : 13
474 : 7.7477558
5 : I
8 : 17.3
854 : p
9 : 10
最后,关于输出的顺序,解决方案将改变这一行:
ds = [dict(w.split('=', 1) for w in x) for x in s1]
因为s1仍包含正确的顺序,而ds不包含:
S1
0 [3=123, 4=88, 5=M, 8=75, 9=29]
1 [3=38, 4=13, 5=I, 8=17.3, 9=10, 1021=0, 854=p,...
dtype: object
DS
[{'3': '123', '4': '88', '5': 'M', '8': '75', '9': '29'},
{'1021': '0',
'3': '38',
'394': '7.73',
'4': '13',
'474': '7.7477558',
'5': 'I',
'8': '17.3',
'854': 'p',
'9': '10'}]
在我看来,dict的键被自动排序为字符串,这解释了为什么1021在3之前出现。我虽然通过升序对它们进行排序,但这不会产生从txt数据中请求的顺序。因此,我不知道解决方案,我也很好奇答案。