Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/pandas/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 熊猫比较-如何比较2个单独数据框中的2个日期列_Pandas_Csv_Date_Compare - Fatal编程技术网

Pandas 熊猫比较-如何比较2个单独数据框中的2个日期列

Pandas 熊猫比较-如何比较2个单独数据框中的2个日期列,pandas,csv,date,compare,Pandas,Csv,Date,Compare,我有一次csv缺少日期,我创建了一个相同日期范围的新df,没有缺少日期。我想比较两个csv,并在原始csv中有空白日期的地方放置一个NaN: 例如: DateTime Measurement Dates 0 2016-10-09 00:00:00 1021.9 2016-10-09 1 2016-10-11 00:00:00 1019.9 2016-10-10 2 2016-10-12 00:00:00 1015.8 201

我有一次csv缺少日期,我创建了一个相同日期范围的新df,没有缺少日期。我想比较两个csv,并在原始csv中有空白日期的地方放置一个NaN:

例如:

    DateTime            Measurement Dates
0   2016-10-09 00:00:00 1021.9      2016-10-09
1   2016-10-11 00:00:00 1019.9      2016-10-10
2   2016-10-12 00:00:00 1015.8      2016-10-11
3   2016-10-13 00:00:00 1013.2      2016-10-12
4   2016-10-14 00:00:00 1005.9      2016-10-13
因此,我希望新表是:

    DateTime            Measurement Dates
0   2016-10-09 00:00:00 1021.9      2016-10-09
1   Nan        00:00:00 Nan         2016-10-10
2   2016-10-11 00:00:00 1015.8      2016-10-11
3   2016-10-12 00:00:00 1013.2      2016-10-12
4   2016-10-13 00:00:00 1005.9      2016-10-13
然后我将删除DateTime列,这样最终的df是一个完整的日期列表,其中包含缺失的度量值

到目前为止,我使用的代码是:

new_dates = pandas.date_range(start = '2016-10-09 00:00:00', end = '2017-10-09 00:00:00')

merged = pandas.merge(measurements, updated_dates,left_index=True, right_index=True)

如果我理解正确,您希望将
DateTime
列重新采样为每日频率,并用
NaN
填补空白:

# Use this line if your DateTime column is not datetime type yet
# df['DateTime'] = pd.to_datetime(df['DateTime'])

dates = pd.date_range(df['DateTime'].min(), df['DateTime'].max(), freq='D')
df = df.set_index('DateTime').reindex(dates).reset_index()
输出

       index  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9
    DateTime  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9

如果您有唯一的日期,也可以使用
重新采样
。如果您的日期不唯一,则会将其聚合,并取两个日期的
平均值

df.set_index('DateTime').resample('D').mean()
输出

       index  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9
    DateTime  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9

如果我理解正确,您希望将
DateTime
列重新采样为每日频率,并用
NaN
填补空白:

# Use this line if your DateTime column is not datetime type yet
# df['DateTime'] = pd.to_datetime(df['DateTime'])

dates = pd.date_range(df['DateTime'].min(), df['DateTime'].max(), freq='D')
df = df.set_index('DateTime').reindex(dates).reset_index()
输出

       index  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9
    DateTime  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9

如果您有唯一的日期,也可以使用
重新采样
。如果您的日期不唯一,则会将其聚合,并取两个日期的
平均值

df.set_index('DateTime').resample('D').mean()
输出

       index  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9
    DateTime  Measurement
0 2016-10-09       1021.9
1 2016-10-10          NaN
2 2016-10-11       1019.9
3 2016-10-12       1015.8
4 2016-10-13       1013.2
5 2016-10-14       1005.9

没有意义,在你的解释中,你说你有一个缺少日期的csv,但是你的示例数据框没有缺少日期,只有输出。如果不清楚,很抱歉。我已经合并了两个数据帧,正如您在第一列(DateTime)中看到的,2016-10-10的日期缺失,但它出现在第三列(Dates)。我希望能够比较这两列,并确定2016-10-10或任何其他日期缺失。没有意义,在您的解释中,您说您有一个丢失日期的csv,但您的示例数据框没有丢失日期,只有输出。如果不清楚,很抱歉。我已经合并了两个数据帧,正如您在第一列(DateTime)中看到的,2016-10-10的日期缺失,但它出现在第三列(Dates)。我希望能够比较这两列,并确定2016-10-10或任何其他日期缺失。非常感谢,我刚刚尝试运行您提供的第一个请求,但出现以下错误:“ValueError:无法从重复轴重新编制索引”,这意味着您的
DateTime
列具有重复项,因此,同一个日期有多个测量值。第二个解决方案将起作用,但请注意,它将同一日期的测量值聚合在一起,并取其平均值@JNixGood,别忘了如果它有帮助,那么其他人也可以得到帮助:)@JNixcool谢谢,我刚刚尝试运行了您上面提供的第一个请求,但出现了以下错误:“ValueError:无法从重复轴重新编制索引”,这意味着您的
DateTime
列有重复项,因此,同一个日期有多个测量值。第二个解决方案将起作用,但请注意,它将同一日期的测量值聚合在一起,并取其平均值@JNixGood,不要忘记它是否有帮助,这样其他人也可以得到帮助:)@JNix