python - 日期范围内的 DataFrame 选择返回无行
问题描述
我正在遵循 SO 上通常推荐的流程,将 DataFrame 合并到我计划用于分析的样本选择中,但在使用过程中的某个地方pd.date_range
以及日期之间的选择中,数据丢失,列标题为唯一存在的数据。
这是我的变量:
custom_date_start = '2018-01-01'
custom_date_end= '2018-10-31'
sheet_date = 'date'
df_clean # raw data table
表简述:
display(df_clean.head(3))
display(df_clean.tail(3))
# output
date b_clicks b_leads b_sals
2 1/1/2018 72 6 5
3 1/2/2018 232 9 7
4 1/3/2018 255 23 17
date b_clicks b_leads b_sals
729 12/29/2019
730 12/30/2019
731 12/31/2019
样品选择:
date_range = pd.date_range(custom_date_start, custom_date_end)
print(date_range)
display(df_clean.head(1))
display(df_clean.tail(1))
df_clean_test = df_clean[(df_clean[sheet_date] > custom_date_start) & (df_clean[sheet_date] <= custom_date_end)]
display(df_clean_test.head(1))
display(df_clean_test.tail(1))
# output
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08',
'2018-01-09', '2018-01-10',
...
'2018-10-22', '2018-10-23', '2018-10-24', '2018-10-25',
'2018-10-26', '2018-10-27', '2018-10-28', '2018-10-29',
'2018-10-30', '2018-10-31'],
dtype='datetime64[ns]', length=304, freq='D')
date b_clicks b_leads b_sals # df_clean
2 1/1/2018 72 6 5
date b_clicks b_leads b_sals # df_clean
731 12/31/2019
date b_clicks b_leads b_sals # df_clean_test
date b_clicks b_leads b_sals # df_clean_test
解决方案
您的逻辑是正确的,但问题在于比较。
考虑这个例子,
df1 = pd.DataFrame({'Date': {0: '26/1/2016 ', 1: '27/1/2016 '}})
df1
输出:
Date
0 26/1/2016
1 27/1/2016
其他数据框,
date_range = pd.date_range('2016-01-26', '2016-01-27')
df2 = pd.DataFrame({'Date': date_range})
df2
输出:
Date
0 2016-01-26
1 2016-01-27
让我们比较不同格式的日期,
print(df2['Date'] == df1['Date'])
输出:
0 False
1 False
Name: Date, dtype: bool
现在,更正Date
df1的格式,
df1['Date'] = pd.to_datetime(df1['Date'])
df1
输出:
Date
0 2016-01-26
1 2016-01-27
让我们再次比较两个数据框的日期,
print(df1['Date'] == df2['Date'])
输出:
0 True
1 True
Name: Date, dtype: bool
在您的示例中,date
indf_clean
的格式不正确,因此相比之下,所有值均为 false 且不返回任何行。
推荐阅读
- vba - MS Word VBA如何判断范围是否在框架内
- json - importXML 是否也适用于需要填写字段的动态页面?
- matlab - 在matlab中通过冒号运算符生成矩阵(双)并将其存储在单元格中
- python - Windows 中没有名为“tkinter”(Python3.8)的模块
- arrays - 将二维数组传递给c语言中的函数,int * b [4]和int b [] [4]有什么区别?
- javascript - 如何根据 React 中变量的给定名称导入和渲染 svg 文件?
- javascript - “ document.getElementById("").value" 在我的 Visual Studio 代码中不起作用
- java - 如何解决崩溃的应用程序问题和 FATAL EXCEPTION 错误?
- java - 同一个 .java 文件中的多条记录
- python - 到处使用 `from __future__ import annotations` 有什么缺点吗?