将嵌套列表转换为pd数据帧的快速Python方法

将嵌套列表转换为pd数据帧的快速Python方法,python,pandas,list,nested,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

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

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)
我对这段代码不是特别满意,因为必须重置索引和重命名列。谁有更好的解决方案

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


提前感谢

我认为下面是使用
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
唯一的解决方案是:


非常感谢,令人惊讶的答案!还有一个问题,为什么您更喜欢元组/列表理解方法而不是熊猫解决方案编辑:nm,我也喜欢它,更干净。Thanks@Rens-嗯,我认为这取决于数据,但我认为
列表理解
应该更快。真实数据中的最佳测试性能
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