如何在数据帧上使用 apply 函数来检索特定列?

问题描述

我编写了以下代码来下载数据集并在 DataFrame 上应用 EDA 函数

url = "https://query1.finance.yahoo.com/v7/finance/download/RELIANCE.BO?period1=1577110559&period2=1608732959&interval=1d&events=history&includeAdjustedClose=true"
r = requests.get(url)
open(stock+'.csv','wb').write(r.content)  
ril = pd.read_csv(r'RELIANCE.csv',date_parser='Date')
ril.head(10)

这里我想通过apply列检索Close列以练习df.apply()函数

def close(stock):
    print(stock.iloc[:,6])
ril.apply(close)

但是代码给出了 IndexingError as

IndexingError                             Traceback (most recent call last)
<ipython-input-21-9fad7d447930> in <module>()
----> 1 asp.apply(close)

7 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in _has_valid_tuple(self,key)
    698         for i,k in enumerate(key):
    699             if i >= self.ndim:
--> 700                 raise IndexingError("Too many indexers")
    701             try:
    702                 self._validate_key(k,i)

IndexingError: Too many indexers

可以用df.apply()函数完成吗?

解决方法

df = pd.read_csv(r'RELIANCE.csv',date_parser='Date')

close1 = df['Close']                                 #standard way of assessing the column
close2 = df.apply(lambda x: x.iloc[4],axis=1)      #apply function row-wise: take 1
close3 = df.apply(lambda x: x[4],axis=1)      # ... take 2
close4 = df.apply(lambda x: x['Close'],axis=1)      # ... take 3

print( np.allclose(close1,close2,equal_nan=True) ) # verify
...

参考:pandas.DataFrame.ilocpandas.DataFrame.apply

基本上,在您的情况下发生的情况是您使用 pd.apply 以及索引 df.iloc[:,...] 迭代您的数据帧。注意 axis=1 以便按行应用函数

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...