函数列 Python

Posted

技术标签:

【中文标题】函数列 Python【英文标题】:Function columns Python 【发布时间】:2017-08-30 16:43:18 【问题描述】:

我正在努力解决在 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' 我的价格(日期) 返回对应的。

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

【问题讨论】:

【参考方案1】:

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

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:将 ndim > 0 的数组转换为索引会导致以后出错 块 = self.blocks[self._blknos[i]]

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

【讨论】:

感谢您的回复,但我想要在函数中输入日期。像 Myprice(date) date = '2017-03-23' 然后返回对应的列 然后定义myPrice = lambda date: mylist.loc[:, date] 它返回 main.> 什么返回打印(df.columns)? DatetimeIndex([ 里面有我不同的日期【参考方案2】:

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]

【讨论】:

感谢您的评论,不幸的是,当我这样做时,它返回TypeError:只有一个元素的整数数组可以转换为索引 @user6457870 抱歉,有错字。我在函数中有data 而不是date。再试一次

以上是关于函数列 Python的主要内容,如果未能解决你的问题,请参考以下文章

来自 2 列数据框的 Python 递归函数

python zip()函数转置表,操作列

如果列值不为 NULL,则 Python pandas 应用函数

python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD)

python使用sklearn中的DictVectorizer函数将字典数据(dictionary)转化为numpy数组使用get_feature_names函数获取数组指定列位置的标签信息

如何使用函数迭代python中数据框的每两列?