Python 如何在pandas中将数组格式化为特定的数据帧格式?
我有一个如下所示的数组:Python 如何在pandas中将数组格式化为特定的数据帧格式?,python,pandas,Python,Pandas,我有一个如下所示的数组: {'loc.1': array([ 1,2,3,4,7,5,6]),'loc.2': array([ 3,4,3,7,7,8,6]),'loc.3': array([ 1,4,3,1,7,8,6]).....} loc.1 loc.2 loc.3 1 3 1 2 4 4 3 3 3 4 7 1 7 7 7 5 8
{'loc.1': array([ 1,2,3,4,7,5,6]),'loc.2': array([ 3,4,3,7,7,8,6]),'loc.3': array([ 1,4,3,1,7,8,6]).....}
loc.1 loc.2 loc.3
1 3 1
2 4 4
3 3 3
4 7 1
7 7 7
5 8 8
6 6 6
在a=pd.DataFrame(数组)之后,它如下所示:
{'loc.1': array([ 1,2,3,4,7,5,6]),'loc.2': array([ 3,4,3,7,7,8,6]),'loc.3': array([ 1,4,3,1,7,8,6]).....}
loc.1 loc.2 loc.3
1 3 1
2 4 4
3 3 3
4 7 1
7 7 7
5 8 8
6 6 6
但这正是我想要的:
Col1. Col.2
loc.1 1,2,3,4,7,5,6
loc.2 3,4,3,7,7,8,6
loc.3 1,4,3,1,7,8,6
我需要这个特殊的格式,因为我希望随后与另一个表连接。熊猫将是我首选的解决方案
谢谢,如果这是一个愚蠢的问题,请道歉。首先在
字典理解中需要连接值
然后对于系列
使用:
a = pd.Series({k:','.join(v.astype(str)) for k, v in array.items()})
print (a)
loc.1 1,2,3,4,7,5,6
loc.2 3,4,3,7,7,8,6
loc.3 1,4,3,1,7,8,6
dtype: object
对于数据帧
:
d = {k:','.join(v.astype(str)) for k, v in array.items()}
a = pd.DataFrame({'a': list(d.keys()), 'b': list(d.values())})
另一种解决方案是创建元组:
L = [(k, ','.join(v.astype(str))) for k, v in array.items()]
a = pd.DataFrame(L, columns=['a','b'])
如果需要列中的数组,请删除join
,并将其转换为string
s:
L = [(k, v) for k, v in array.items()]
a = pd.DataFrame(L, columns=['a','b'])
print (a)
a b
0 loc.1 [1, 2, 3, 4, 7, 5, 6]
1 loc.2 [3, 4, 3, 7, 7, 8, 6]
2 loc.3 [1, 4, 3, 1, 7, 8, 6]
输出:
loc.1 [1, 2, 3, 4, 7, 5, 6]
loc.2 [3, 4, 3, 7, 7, 8, 6]
loc.3 [1, 4, 3, 1, 7, 8, 6]
Name: lists, dtype: object
根据您需要的格式,有两个选项:
d = {'loc.1': np.array([ 1,2,3,4,7,5,6]),
'loc.2': np.array([ 3,4,3,7,7,8,6]),
'loc.3': np.array([ 1,4,3,1,7,8,6])}
res1 = pd.DataFrame([[x] for x in d.values()], index=d.keys())
# 0
# loc.1 [1, 2, 3, 4, 7, 5, 6]
# loc.2 [3, 4, 3, 7, 7, 8, 6]
# loc.3 [1, 4, 3, 1, 7, 8, 6]
res2 = pd.DataFrame([', '.join(list(map(str, x))) for x in d.values()], index=d.keys())
# 0
# loc.1 1, 2, 3, 4, 7, 5, 6
# loc.2 3, 4, 3, 7, 7, 8, 6
# loc.3 1, 4, 3, 1, 7, 8, 6
您可以将stack
与groupby
df.stack().astype(str).groupby(level=1).apply(','.join)
Out[738]:
loc.1 1,2,3,4,7,5,6
loc.2 3,4,3,7,7,8,6
loc.3 1,4,3,1,7,8,6
dtype: object
谢谢-我如何删除左侧的索引并在索引中创建一个索引?您可以使用a.set_index('a')
或a=pd.Series({k:','.join(v.astype(str)),表示数组中的k,v.items())。到_frame('b')