【发布时间】:2018-07-06 06:44:15
【问题描述】:
我已将 csv 文件读入如下所示的数据框:
Datetime Value
0 2017-01-04 00:00:00 0.00
1 2017-01-04 00:15:00 2.00
2 2017-01-04 00:30:00 2.00
3 2017-01-04 00:45:00 1.00
4 2017-01-04 01:00:00 3.00
...
15542 2017-09-09 23:45:00 8.00
[15542 rows x 2 columns]
由于测量失败,缺少一些日期时间。所以我用
resample("15min").mean().fillna(0)
就目前而言,缺失的空白已被填补,但不知何故,新的数据框并不完整 - 确切地说 - 不包括超过某个日期时间的行(8 月 12 日之后的所有数据),令我惊讶的是,这些行更多比翻倍:
Datetime Value
0 2017-01-04 00:00:00 0.00
1 2017-01-04 00:15:00 2.00
2 2017-01-04 00:30:00 2.00
32543 2017-12-08 23:45:00 0.00
[32544 rows x 2 columns]
我的目标只是读取 csv,填补缺少的日期时间空白,并将值设置为 0.00,其中日期时间已完成。在这种特殊情况下,这应该会导致 [15552 x 2 columns](注释:需要添加 10 个日期时间/值)。
代码如下:
import pandas as pd
def read_csv():
for filename in path:
file_list.append(filename)
print(file_list)
dfs = [pd.read_csv(filename, sep=',', parse_dates=[1], decimal='.',
names=headers)for filename in path]
df = pd.concat(dfs)
df_new = df.set_index('Datetime').resample('15 min').mean().fillna(0).reset_index()
print(df_new)
想到了重新索引的问题,但无法解决。 提前致谢。
【问题讨论】:
-
2017-12-08 12 月 8 日不是 8 月 12 日吗?但无论哪种方式,似乎都是数据问题。我会仔细检查您的索引是否是所有日期,而不是字符串和日期的混合。您也可以尝试
asfreq,但我认为resample很好,只是您遇到了某种数据问题。 -
如果您可以使用示例数据集重现错误(而不仅仅是粘贴输出),那么很容易找出答案。因此,没有数据,这里的任何人都只能猜测。
-
@JohnE 好点。首先我也是这么想的,那是 12 月 8 日,这可以解释额外的行。但我检查了与日期时间相关的值,并确认它是 8 月(12 日)。日期时间的
index.dtype为datetime64[ns],格式为%Y/%d/%m %H:%M:%S。我尝试您的建议来重现错误。
标签: python-3.x pandas csv datetime dataframe