如何在python中将两个列表转换为不带['xxx']标签的数据框?

时间:2019-08-03 14:12:12

标签: python pandas dataframe

我在Python中创建了以下两个列表,并希望将它们转换为数据框。

当我运行以下代码时:

print(scores)
print('-'*100)
print(player)
print('-'*100)

dataframe = {'Score': scores, 'Player': player}
df = pd.DataFrame(data=dataframe)

print(df)

我得到以下结果:

[['1 : 0'], ['2 : 0'], ['3 : 0'], ['3 : 1'], ['4 : 1'], ['5 : 1'], ['6:1'], 
 ['6 : 2']]
 --------------------------------------------------------------------------- 
 -------------------------
 [['Tjeerd Westdijk'], ['Emiel Wendt'], ['Brayen Bröcker'], ['Kenneth Misa- 
   Danso'], ['Sabir Achefay'], ['Sabir Achefay'], ['Denzel James'], 
   ['Kenneth Misa-Danso']]
   ------------------------------------------------------------------------- 
   ---------------------------

 Score                Player
0  [1 : 0]     [Tjeerd Westdijk]
1  [2 : 0]         [Emiel Wendt]
2  [3 : 0]      [Brayen Bröcker]
3  [3 : 1]  [Kenneth Misa-Danso]
4  [4 : 1]       [Sabir Achefay]
5  [5 : 1]       [Sabir Achefay]
6  [6 : 1]        [Denzel James]
7  [6 : 2]  [Kenneth Misa-Danso]

但是我不想在[]中获取元素。我该如何解决?

谢谢。

3 个答案:

答案 0 :(得分:3)

快速修复

df=df.apply(lambda x : x.str[0])

从头开始修复

dataframe = {'Score': sum(scores,[]), 'Player': sum(player,[])}
df = pd.DataFrame(data=dataframe) 

加快速度

import itertools
list(itertools.chain.from_iterable(a)))

dataframe = {'Score': itertools.chain.from_iterable(score)), 'Player': itertools.chain.from_iterable(player))}

答案 1 :(得分:3)

您可以使用dict理解将列表列表转换为单个列表,然后调用数据框构造函数:

pd.DataFrame({k:np.concatenate(v) for k, v in dataframe.items()})

或者:

import itertools
pd.DataFrame({k:itertools.chain.from_iterable(v) for k, v in dataframe.items()})

答案 2 :(得分:2)

该错误已经在scoresplayer列表中的中。例如,我们可以使用映射来获取字符串中的第一个元素:

from operator import itemgetter

df = pd.DataFrame(
    data={
        'Score': list(map(itemgetter(0), scores)),
        'Player': list(map(itemgetter(0), player))
    }
)

或者我们可以通过以下方式批量处理它:

df['Score'] = df['Score'].str[0]
df['Player'] = df['Player'].str[0]