上面的链接包含 Dataframe ,它有2列[CREATEDAT,RESPONSE],目标是遍历响应列,在该响应列中有一个估计键,在该键中,我必须获取提供程序&storeexternalid
在代码片段中添加样本行,位置为['store-boundary-dsp']['estimates']
我已经写了一个函数,它可能需要一些修改添加在片段
def traverse_dsp(data_frame,column):
provider = []
store_id= []
#Iterate over each row in Dataframe
for index, row in data_frame.iterrows():
# Iterate over each json object in each row in DataFrame
for i in range(0,len(row[column])):
for k,v in row[column]['store-boundary-dsp']['estimates'][i].items():
if k=="storeExternalId":
store_val=v
store.append(store_val)
if k=="provider":
provider_val=v
provider.append(provider_val)
return provider,store_id
2条答案
按热度按时间ubof19bj1#
如果你use nested list comprehension instead嵌套的for循环:
[
k3List
可以是单个键或键的列表(或元组或集合),get_l
应该是一个函数。如果你想要并行列表,你可以从一个元组列表开始,然后unpack和
zip
基本上将它们“解压缩”到单独的列表中:无论使用哪种函数,
print(f'{store_id=}\n{provider=}')
都应该打印但
get_tuple_lists
的直接输出如下所示:如果你不确定所使用的外部键(如上面的 *
store-boundary-dsp
* 和 *estimates
*)是否存在于每一行,你可以在get_l
中使用try...except
:只是一些关于你问题中的片段的注解:
.iterrows()
、range
或.items()
-可以使用for k,v
* 循环中,定义store_val
或provider_val
(作为v
)也是多余的[除非您计划在其各自的if
块之外使用它们,或者计划以某种方式修改v
],此时您只需**.append(v)
**store-boundary-dsp.estimates
],方法是将它们添加到下面的all_lists
字典中[而不是在 *for est...
* 中编写更多的if
]。
顺便说一句,你也可以使用
.explode
和json_normalize
来完全扁平化DataFrame:62lalag42#
这将创建一个元组列表。每个元组将是store_id和provider对。apply函数用于迭代RESPONSE列,并将该单元格的值传递给extract_details函数,该函数处理主要的数据提取部分。