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' 转换为日期(恕我直言,这也是激进的,但已经存在了一段时间)。
我有一个代码和日期的 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' 转换为日期(恕我直言,这也是激进的,但已经存在了一段时间)。