在类中分配Pandas DataFrame会产生TypeError

时间:2014-04-24 13:28:23

标签: python pandas

我正在对一个类中的数据框进行计算:

数据框看起来像这样:

            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 lambdadebug print部分会给出预期结果。 问题似乎是将apply lambda构造分配回DataFrame。

有什么想法吗?

1 个答案:

答案 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'])