Python 使用公用键将包含公用键作为元素的字典的Dataframe列转换为单独的数据帧

Python 使用公用键将包含公用键作为元素的字典的Dataframe列转换为单独的数据帧,python,pandas,dictionary,dataframe,series,Python,Pandas,Dictionary,Dataframe,Series,这个问题是我不久前在这里发布的一个扩展。我试图理解@patrickjlong1提供的公认答案(再次感谢),因此我正在逐步运行代码并检查结果 我发现这部分很难理解 >>> df_initial data seriesID 0 {'year': '2017', 'period': 'M12', 'periodName'... SMS42000000000000001 1

这个问题是我不久前在这里发布的一个扩展。我试图理解@patrickjlong1提供的公认答案(再次感谢),因此我正在逐步运行代码并检查结果

我发现这部分很难理解

>>> df_initial
data                                                    seriesID
0   {'year': '2017', 'period': 'M12', 'periodName'...   SMS42000000000000001
1   {'year': '2017', 'period': 'M11', 'periodName'...   SMS42000000000000001
2   {'year': '2017', 'period': 'M10', 'periodName'...   SMS42000000000000001
3   {'year': '2017', 'period': 'M09', 'periodName'...   SMS42000000000000001
4   {'year': '2017', 'period': 'M08', 'periodName'...   SMS42000000000000001
5   {'year': '2017', 'period': 'M07', 'periodName'...   SMS42000000000000001
第一列每行中的元素是一个字典,它们都有公共键:“年”、“期间”等。我想将其转换为:

    footnotes   period  periodName  value   year
0   {}           M12    December    6418025 2017
0   {}           M11    November    6418195 2017
0   {}           M10    October     6418284 2017
...
@patrickjlong1提供的解决方案是一次转换一行,然后将它们全部追加,我理解为一个字典可以转换为一个数据帧:

    for i in range(0, len(df_initial)):
        df_row = pd.DataFrame(df_initial['data'][i])
        df_row['seriesID'] = series_col
        df = df.append(df_row, ignore_index=True)
我的问题是:这是转换我想要的数据的唯一方法吗?如果没有,还有哪些方法

谢谢

避免pd.DataFrame。在循环中追加 我怎么强调都不过分。这种方法成本很高,因为它不必要地复制数据。把它放在一个循环中会使它的价格提高n倍

相反,您可以将字典列表提供给
pd.DataFrame
构造函数:

df = pd.DataFrame(df_initial['seriesID'].tolist())

谢谢你的回复。请你再详细解释一下“昂贵”的定义好吗?你的意思是它会消耗更多的内存还是更容易出错?这两种方法都能满足我的需求,但结果的排序似乎有所不同。我需要抽出时间将你的答案汇编成第二种方法,并比较结果。再次感谢您,很快,目标列的名称是
data
,而不是
seriesID
,但这没什么大不了的。@BowenLiu,昂贵的意思是“性能方面的昂贵”,通常以时间衡量。同样,便宜意味着高效/高效。