函数列 Python

Function columns Python

我正在努力解决 python/pandas 中可能很容易的事情...

我有一个数据框,其中包含日期列、索引水果名称和内部价格。

我正在寻找一个功能,当我输入一个日期时,它会给我该日期的水果价格。

[in]  mylist
[out]

             2017-03-23 2017-03-22 2017-03-21 2017-03-20 2017-03-17 2017-03-16 

pear            12       13        14        12        20      17   
apple           14        9        11        21        12      4   
banana         120       180       140       170       605     802  
etc...         NaN       NaN       NaN       NaN       NaN     NaN   


ex. [in] myPrice('2017-03-23')
[out]   2017-03-23
pear       12
apple      14 
banana     120

非常感谢!

编辑:我的目标是输入一个日期,它会返回对应的列,所以 日期 = '2017-03-23' 我的价格(日期) return对应.

所以我不是想通过 mylist[2017-03-23] 来做,而是用一些应该是 mylist[date] 的东西

pandas 允许您使用 [] 选择器

通过列名访问列
mylist['2017-03-23']

但是,更明确地说,您可以使用 .loc[]

mylist.loc[:, '2017-03-23']

甚至使用xs方法:

mylist.xs('2017-03-23', axis=1)

其中任何一个都可以包含在一个函数中:

def myPrice(date):
    return mylist[date]

如果列是字符串,我想你需要:

mylist['2017-03-23']
mylist.loc[:, '2017-03-23']

如果列是日期时间则需要 datetime:

#If columns not datetime, convert them
mylist.columns = pd.to_datetime(mylist.columns)

#convert string to datetime
date = pd.to_datetime('2017-03-23')
#another solution
#date = pd.Timestamp('2017-03-23')

print (mylist[date])
pear       12
apple      14
banana    120
Name: 2017-03-23 00:00:00, dtype: int64

print (mylist.loc[:, date])
pear       12
apple      14
banana    120
Name: 2017-03-23 00:00:00, dtype: int64

并且对于一列 DataFrame 添加 []:

print (mylist[[date]])
        2017-03-23
pear            12
apple           14
banana         120

print (mylist.loc[:, [date]])
        2017-03-23
pear            12
apple           14
banana         120

也有效(但我收到警告):

VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future block = self.blocks[self._blknos[i]]

date ='2017-03-23'
print (mylist[date])