通过使用单元格内列表扩展 pandas 数据框

1 投票
2 回答
740 浏览
提问于 2025-04-18 13:29

我有一个数据表,其中第三列是一个列表:

import pandas as pd 
pd.DataFrame([[1,2,['a','b','c']]])

我想把这个嵌套的列表拆开,并且用第一列和第二列的相同值来创建更多的行。最终的结果应该像这样:

pd.DataFrame([[[1,2,'a']],[[1,2,'b']],[[1,2,'c']]])

注意,这只是一个简化的例子。实际上,我有多行数据想要“扩展”。

关于我的进展,我不知道该怎么解决这个问题。嗯,我想我可以在考虑其他列值的同时,逐个取出嵌套列表中的每个成员。然后我可以用列表推导式来生成更多的列表。我会继续这样做,添加很多列表来创建一个新的数据表……但这似乎有点复杂。有没有更简单的解决方案呢?

2 个回答

1

这个问题和OR描述的情况不完全一样,但有关系,更像是pandas的用法。这里说的是你有一个字典,里面的值是长度不一样的列表。在这种情况下,你可以用长格式创建一个DataFrame,方法如下。

import pandas as pd

my_dict = {'a': [1,2,3,4], 'b': [2,3]}
df = pd.DataFrame.from_dict(my_dict, orient='index')
df = df.unstack() # to format it in long form
df = df.dropna() # to drop nan values which were generated by having lists of unequal length 
df.index = df.index.droplevel(level=0) # if you don't want to store the index in the list 
# NOTE this last step results duplicate indexes
2

首先,创建一个只有一列的数据表,然后再添加一些值不变的列:

import pandas as pd

df = pd.DataFrame({"data": ['a', 'b', 'c']})
df['col1'] = 1
df['col2'] = 2
print df

这样会输出:

  data  col1  col2
0    a     1     2
1    b     1     2
2    c     1     2

撰写回答