熊猫重新取样滴柱

时间:2017-05-25 23:01:24

标签: python pandas

Pandas在重新取样时丢弃了我的一个列,我不明白为什么。我已经读过如果列没有合适的数字类型会发生这种情况,但这不是这种情况:

import pandas;

# movements is the target data frame with daily movements
movements = pandas.DataFrame(columns=['date', 'amount', 'cash']);
movements.set_index('date', inplace=True);

# df is a movement to add
df = pandas.DataFrame({'amount': 179,
                       'cash':   100.00},
                       index=[pandas.Timestamp('2015/12/31')]);
print(df); print(df.info()); print();

# add df to movements and resample movements
movements = movements.append(df).resample('D').sum().fillna(0);
print(movements); print(movements.info());

结果:

            amount   cash
2015-12-31     179  100.0
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1 entries, 2015-12-31 to 2015-12-31
Data columns (total 2 columns):
amount    1 non-null int64
cash      1 non-null float64
dtypes: float64(1), int64(1)
memory usage: 24.0 bytes
None

             cash
2015-12-31  100.0
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1 entries, 2015-12-31 to 2015-12-31
Freq: D
Data columns (total 1 columns):
cash    1 non-null float64
dtypes: float64(1)
memory usage: 16.0 bytes
None

我注意到只有当cash是浮点数时才会发生丢弃,即如果上面的代码cash设置为100(int)而不是100.00,然后所有列都是int,amount不会被删除。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题是当您创建移动DF时,列的日期类型设置为object。

如果您预先设置列类型或稍后将其更改为数字类型,则应该可以使用。

movements.append(df).apply(pd.to_numeric).resample('D').sum().fillna(0)
Out[100]: 
            amount   cash
2015-12-31     179   100.0