我正在清理一些代码,使其更具Pythonic性,但是我想知道下面是否可以使用itertools或pandas方法以更好的方式编写下面的代码。下面的代码有效,但是出于性能原因,我希望删除double for循环并合并一些代码。
最终,我正在处理一个称为Pandas列的索引列表。
def foo(dataset):
api_reshaped = pd.DataFrame(columns=['foo', 'bar'])
k = 0
for index, _ in dataset.iterrows():
for key in dataset.iloc[index][0][0]:
api_reshaped.loc[k, 'foo'] = key
api_reshaped.loc[k, 'bar'] = dataset.iloc[index][0][0][key]
k += 1
return api_reshaped
以下是此功能的预期输入/输出:
foo_input = pd.dataframe({
'batch_data': [{'foo_query': [{'bar_query': 'data'}]}],
'query_spell': ['foo']
})
print foo_input(foo_input)
# expected_output = pd.dataframe({
# 'foo': 'foo_query',
# 'bar': [{'bar_query': 'data'}]
# })
非常感谢!
答案 0 :(得分:0)
您可以将列表理解与转置一起使用:
# your input data
foo_input = pd.DataFrame({
'batch_data': [{'foo_query': [{'bar_query': 'data'}]}],
'query_spell': ['foo']
})
# use list comprehension with transpose
df = pd.DataFrame([item for item in foo_input['batch_data']]).T.reset_index()
# rename your columns
df.columns = ['Foo', 'Bar']
Foo Bar
0 foo_query [{'bar_query': 'data'}]
如果您要删除列表并仅保留字典,则可以将applymap
与lambda函数一起使用