Pandas on Apply传递错误的值

时间:2015-02-12 20:25:28

标签: python pandas

我有一个代码和日期的DataFrame。其中一个代号恰好是" NOV"。使用.apply时,pandas将其转换为日期对象。

In [75]:
tmp = [{'ticker': 'NOV', 'date': datetime.datetime(2010,1,1,0,0,0)}, {'ticker': 'NOV', 'date': datetime.datetime(2010,1,1,0,0,0)}]
df = pd.DataFrame(tmp)
df

Out[75]:
date    ticker
0   2010-01-01  NOV
1   2010-01-01  NOV

上面的字符串看起来不错。

In [78]:
def print_test(row):
    print(row['date'])
    print(row['ticker'])
df.apply(lambda x: print_test(x), axis=1)
2010-01-01 00:00:00
2015-11-12 00:00:00
2010-01-01 00:00:00
2015-11-12 00:00:00

Out[78]:
0    None
1    None
dtype: object

似乎要转换为约会!

这是一个错误还是我做错了什么?对于成千上万的其他代码,它的工作正常。

1 个答案:

答案 0 :(得分:2)

当给出日期时间时,系列似乎对推理有点过于激进(并且其余字符串是可转换的)。我评论了您的问题here

作为一种解决方法,你可以做到

In [7]: df
Out[7]: 
        date ticker
0 2010-01-01    NOV
1 2010-01-01    NOV

In [9]: df.set_index('date').iloc[0]
Out[9]: 
ticker    NOV
Name: 2010-01-01 00:00:00, dtype: object

这将确保您可以干净地操作。请注意,这只会发生,因为dateutil会将'NOV'转换为日期(这也是咄咄逼人的恕我直言,但已经存在了一段时间)。