Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 熊猫-创建动态列_Python 3.x_Pandas_Dataframe_Flatten_Normalize - Fatal编程技术网

Python 3.x 熊猫-创建动态列

Python 3.x 熊猫-创建动态列,python-3.x,pandas,dataframe,flatten,normalize,Python 3.x,Pandas,Dataframe,Flatten,Normalize,我每行都有一本字典。我的目标是把它平铺成一排 0 [{'key': 'ga_session_id', 'value': {'string_va... 1 [{'key': 'source', 'value': {'string_value': '... 2 [{'key': 'firebase_event_origin', 'value': {'s... 3 [{'key': 'firebase_conversion', 'value': {'str... Name:

我每行都有一本字典。我的目标是把它平铺成一排

0    [{'key': 'ga_session_id', 'value': {'string_va...
1    [{'key': 'source', 'value': {'string_value': '...
2    [{'key': 'firebase_event_origin', 'value': {'s...
3    [{'key': 'firebase_conversion', 'value': {'str...

Name: params, dtype: object
以下是一行的示例:

[{'key': 'ga_session_id',
  'value': {'string_value': None,
   'int_value': '1575017974',
   'float_value': None,
   'double_value': None}},
 {'key': 'firebase_conversion',
  'value': {'string_value': None,
   'int_value': '1',
   'float_value': None,
   'double_value': None}},
 {'key': 'firebase_event_origin',
  'value': {'string_value': 'auto',
   'int_value': None,
   'float_value': None,
   'double_value': None}},
 {'key': 'ga_session_number',
  'value': {'string_value': None,
   'int_value': '2',
   'float_value': None,
   'double_value': None}},
 {'key': 'engaged_session_event',
  'value': {'string_value': None,
   'int_value': '1',
   'float_value': None,
   'double_value': None}}]
我希望迭代行中的每个元素,并动态创建动态列。例如:

[{'key': 'ga_session_id',
  'value': {'string_value': None,
   'int_value': '1575017974',
   'float_value': None,
   'double_value': None}}, ...]

这同样适用于行中的其他元素。我知道我们可以使用apply动态填充新列。这就是我尝试过的

import itertools as it
df4 = pd.DataFrame.from_records(it.chain.from_iterable(
    i for i in df2['params']))
这是输出:


但是,我丢失了数据所属行的轨迹。我需要一些帮助

我创建了数据帧的副本,然后逐行迭代,动态创建列,并在新(副本)数据帧中添加数据

tmp_df = deepcopy(df)
col_list = []
for index,row in df.iterrows():
    for element in row[column]:
        cols = ["%s.%s"%(element['key'],key) for key in element['value'].keys()]
        tmp_df = tmp_df.reindex(columns=list(dict.fromkeys(tmp_df.columns.tolist() + cols).keys()))
        tmp_df.loc[index,cols] = element['value'].values()

我创建了数据帧的副本,然后逐行迭代,动态创建列,并在新(复制)数据帧中添加数据

tmp_df = deepcopy(df)
col_list = []
for index,row in df.iterrows():
    for element in row[column]:
        cols = ["%s.%s"%(element['key'],key) for key in element['value'].keys()]
        tmp_df = tmp_df.reindex(columns=list(dict.fromkeys(tmp_df.columns.tolist() + cols).keys()))
        tmp_df.loc[index,cols] = element['value'].values()

所有元素是否具有相同的结构?(
深度
等)是的,它们具有相同的结构
列表中有多少记录?为什么您不想使用迭代创建
元组
dict
?列表中的记录数是可变的,我的目标是将所有这些记录展平以便所有元素都具有相同的结构?(
深度
等)是的,它们具有相同的结构
列表
中有多少记录?为什么不想使用迭代创建
元组的
dict
?列表中的记录数是可变的,我的目标是将所有这些记录展平
tmp_df = deepcopy(df)
col_list = []
for index,row in df.iterrows():
    for element in row[column]:
        cols = ["%s.%s"%(element['key'],key) for key in element['value'].keys()]
        tmp_df = tmp_df.reindex(columns=list(dict.fromkeys(tmp_df.columns.tolist() + cols).keys()))
        tmp_df.loc[index,cols] = element['value'].values()