我在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]
但是我不想在[]中获取元素。我该如何解决?
谢谢。
答案 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)
该错误已经在scores
和player
列表中的中。例如,我们可以使用映射来获取字符串中的第一个元素:
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]