我有一个代码和日期的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
似乎要转换为约会!
这是一个错误还是我做错了什么?对于成千上万的其他代码,它的工作正常。
答案 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'转换为日期(这也是咄咄逼人的恕我直言,但已经存在了一段时间)。