首页 > 解决方案 > 更改数据框列表的函数

问题描述

我想用 python 代码自动化一些例程:


portfolio = [ apple, tesla, amazon]

def change_dim(list): 
   for x in list:
      x = x['Adj Close']
   return list
# That doesn't work for me.

我有一个带有股票数据的熊猫数据框列表(每列 5 列)。我需要一个函数,该函数将列表作为参数,遍历所有项目并将它们更改为仅具有“Adj Close”列的 dfs,然后返回更改列表 dfs。如果您能提供超过 1 个选项,我将不胜感激。

添加只是想在这里问另一个问题:在我有了这个数据框之后,我想合并它们:

# apple , amazon - two df with the same datetime index and 'Adj Close' #columns
portfolio = pd.merge(apple, amazon, how = 'left', on = apple)

这给了我下一个错误:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-54-e47969d90c08> in <module>
----> 1 portfolio = pd.merge(apple, amazon, how = 'left', on = apple)

~/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/merge.py in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
     45                          right_index=right_index, sort=sort, suffixes=suffixes,
     46                          copy=copy, indicator=indicator,
---> 47                          validate=validate)
     48     return op.get_result()
     49 

~/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/merge.py in __init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy, indicator, validate)
    527         (self.left_join_keys,
    528          self.right_join_keys,
--> 529          self.join_names) = self._get_merge_keys()
    530 
    531         # validate the merge keys dtypes. We may need to coerce

~/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/merge.py in _get_merge_keys(self)
    821                         if rk is not None:
    822                             right_keys.append(
--> 823                                 right._get_label_or_level_values(rk))
    824                             join_names.append(rk)
    825                         else:

~/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in _get_label_or_level_values(self, key, axis)
   1704             values = self.axes[axis].get_level_values(key)._values
   1705         else:
-> 1706             raise KeyError(key)
   1707 
   1708         # Check for duplicates

KeyError: Date

问题是什么?非常感谢!

标签: pythonpandasfunctionloopsdataframe

解决方案


portfolio = [ apple, tesla, amazon]

def change_dim(list): 
   for x in list:
      x = x['Adj Close']
   return list

这里的问题是 apple、tesla 和 amazon 不是定义变量。您可以通过定义它们来解决这个问题:

apple = value
tesla = value
amazon = value

portfolio = [ apple, tesla, amazon]

def change_dim(list): 
   for x in list:
      x = x['Adj Close']
   return list

如果您需要定义它而不给它一个值,只需说 variable = None


推荐阅读