遍历两个熊猫名单

时间:2018-11-13 04:45:58

标签: python pandas

我正在清理一些代码,使其更具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'}]
# })

非常感谢!

1 个答案:

答案 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函数一起使用