我正在对一个类中的数据框进行计算:
数据框看起来像这样:
JIBA3M Year Month Day Day_b MonthBegin
2014-01-01 0.05216 2014 1 1 1 2014-01-01 00:00:00
2014-01-02 0.05216 2014 1 2 1 2014-01-01 00:00:00
2014-01-03 0.05225 2014 1 3 1 2014-01-01 00:00:00
2014-01-04 0.05225 2014 1 4 1 2014-01-01 00:00:00
2014-01-05 0.05225 2014 1 5 1 2014-01-01 00:00:00
在ipython笔记本中的类之外,以下内容可以互换:
df['MonthBegin'] = df[['Year', 'Month', 'Day_b']].apply(lambda s : datetime.datetime(*s), axis=1)
and
df['MonthBegin'] = df.apply(lambda x: datetime.datetime(x.Year, x.Month, 1), axis=1)
如果我通过第二个类的 init 方法尝试代码 方式给出错误:
TypeError: ('integer argument expected, got float', u'occurred at index 2014-01-01 00:00:00')
我已经检查过,如果我apply lambda
,debug print
部分会给出预期结果。
问题似乎是将apply lambda构造分配回DataFrame。
有什么想法吗?
答案 0 :(得分:1)
您可以通过转换来确保这些是整数:
df['MonthBegin'] = df.apply(lambda x: datetime.datetime(int(x.Year), int(x.Month), 1), axis=1)
或可能转换每一列以确保它是int64(而不是浮点数):
df['Year'] = df['Year'].astype(np.int64)
df['Month'] = df['Month'].astype(np.int64)
注意:可能有一些NaN导致这种浮动上传,在这种情况下你可能不得不重新考虑你的方法(因为你将无法转换为int!),一个选项可能是做字符串格式化,然后应用to_datetime
:
df['Date'] = df.Year + '-' + df.Month + '-' + '01'
df['Date'] = pd.to_datetime(df['Date'])