Pandas on Apply 传递了错误的值

Pandas on Apply passing wrong value

我有一个代码和日期的 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

好像要转换成日期!

这是一个错误还是我做错了什么?对于数以千计的其他代码,它工作得很好。

当给定日期时间(并且字符串的其余部分是可转换的)时,似乎系列在推理上有点过于激进。我评论了你的问题 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' 转换为日期(恕我直言,这也是激进的,但已经存在了一段时间)。