Python 使用公用键将包含公用键作为元素的字典的Dataframe列转换为单独的数据帧
这个问题是我不久前在这里发布的一个扩展。我试图理解@patrickjlong1提供的公认答案(再次感谢),因此我正在逐步运行代码并检查结果 我发现这部分很难理解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
>>> 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,昂贵的意思是“性能方面的昂贵”,通常以时间衡量。同样,便宜意味着高效/高效。