python - 将嵌套列表转换为 pd Dataframe 的快速且 Pythonic 的方法

标签 python pandas list nested

我有一个列表,其中每个元素都是一个包含书中字符串的列表

test_list = [['I love Stackoverflow', 'For ever', 'and always'], ['I dont like rain', 'it is wet']]
book_names = ['message to SO', 'confessions']

我想获取以下数据框


          book              sentence
0  message to SO  I love Stackoverflow
1  message to SO              For ever
2  message to SO            and always
3    confessions      I dont like rain
4    confessions             it is wet

现在,我设法使用以下代码来做到这一点:

df = pd.DataFrame(test_list, index=book_names).stack().reset_index(level=0)
df.rename(columns={'level_0':'book',
                    0 : 'sentence'},
                    inplace = True)

结果:

            book              sentence
0  message to SO  I love Stackoverflow
1  message to SO              For ever
2  message to SO            and always
0    confessions      I dont like rain
1    confessions             it is wet

现在我必须重新索引结果:

df.reset_index(drop=True)

我对这段代码不是特别满意,必须重置索引并重命名列。大家有更好的解决办法吗?

实际上 test_list 相当大,因此速度也是一个重要的考虑因素

提前致谢

最佳答案

我认为这里最好使用 zip 在列表理解中创建元组列表并传递给 DataFrame 构造函数:

df = pd.DataFrame([(b,s) for b, n in zip(book_names, test_list) for s in n], 
                   columns=['book','sentence'])
print (df)
            book              sentence
0  message to SO  I love Stackoverflow
1  message to SO              For ever
2  message to SO            and always
3    confessions      I dont like rain
4    confessions             it is wet

唯一的 pandas 解决方案是 DataFrame.explode :

df = pd.DataFrame({'book':book_names ,
                   'sentence':test_list}).explode('sentence').reset_index(drop=True)
print (df)
            book              sentence
0  message to SO  I love Stackoverflow
1  message to SO              For ever
2  message to SO            and always
3    confessions      I dont like rain
4    confessions             it is wet

关于python - 将嵌套列表转换为 pd Dataframe 的快速且 Pythonic 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66687992/

相关文章:

python - 如何将/proc/net/dev 的输出解析为 key :value pairs per interface using Python?

python - 从字符串中提取字典

python - 关于索引重复条目的 Pandas 枢轴警告

python - numpy.concatenate 对单个参数有什么作用?

python - autoenv 甚至在子文件夹中执行

python - 关于 all() 和 any() 函数的混淆

python - Pandas 中元组的拆分系列

python - 将文本添加到 pandas dataframe plot

c# - 在列表中查找两个(或更多)属性的最大值

arrays - Dart:如何将简单的 map 转换为 dart/flutter 中的列表?