我有一个日期不完整的 DataFrame,我只需要每个月最后一天可用的日期/行。我尝试使用 TimeGrouper 并获取.last()每个组。
import pandas as pd
idx = [pd.datetime(2016,2,1),pd.datetime(2017,1,20),pd.datetime(2017,2,1),pd.datetime(2017,2,27)]
df = pd.DataFrame([1,2,3,4],index=idx)
df
0
2016-02-01 1
2017-01-20 2
2017-02-01 3
2017-02-27 4
Run Code Online (Sandbox Code Playgroud)
期待:
df_eom
0
2016-02-01 1
2017-01-20 2
2017-02-27 4
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个:
df_eom = df.groupby(pd.TimeGrouper(freq='1M')).last()
df_eom
0
2016-02-29 1.0
2016-03-31 NaN
2016-04-30 NaN
2016-05-31 NaN
2016-06-30 NaN
2016-07-31 NaN
2016-08-31 NaN
2016-09-30 NaN
2016-10-31 NaN
2016-11-30 NaN
2016-12-31 NaN
2017-01-31 2.0
2017-02-28 4.0
Run Code Online (Sandbox Code Playgroud)
它不仅创建了不在 df 中的日期,而且还更改了 df 第一行和最后一行的索引。我使用 TimeGrouper 错了吗?
假设我有一系列 pandas.tseries.index.DatetimeIndex,基本上是 2016 年的工作日。是否有任何简单/优雅的方法可以找出该系列中天数的顺序差异?就像 .diff() 对整数或浮点 DataFrame 列所做的那样。
import pandas as pd
import numpy as np
ds = pd.date_range("2016-01-01","2016-12-31",freq='B')
# I was hoping for something like this:
ds.diff().days
# this gives me what I want, but it is ugly and unintuitive
np.diff(ds) / 86400000000000
Run Code Online (Sandbox Code Playgroud)
我也考虑过,np.diff(ds.date)但它给了我一个 datetime.timedelta 的 ndarray ,我不知道如何将它转换为没有 for 循环的整数数组/系列。
我试图让python程序通过Gmail发送附件。我使用发现的示例代码: 通过gmail和python发送电子邮件
问题是,当我向自己发送.xls,.xlsx,.xlsm之类的Excel文件时,即使原始文件没问题,我也无法打开附件,因为它们已损坏。但是发送.csv可以正常工作。整个过程不会弹出任何警告或错误。
问题是:oauth2.0或Gmail或MIME是否将某些格式的附件弄乱了?以及如何在不修改程序的情况下告诉程序上传和发送附件?