通过使用单元格内列表扩展 pandas 数据框
我有一个数据表,其中第三列是一个列表:
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