Python – 通过时间过滤 Pandas DataFrame
Pandas是用于数据分析的Python库,它提供了许多用于读取、处理和分析数据的工具。由于数据经常包含时间序列数据,因此Pandas内置了对日期和时间数据进行操作的功能。
在本文中,我们将学习如何使用Pandas DataFrame中的时间戳和日期范围来过滤数据。
Pandas DataFrame时间戳
Pandas提供了许多方式来表示时间戳,最基本的是Python的datetime模块。下面的示例显示了如何在Pandas DataFrame中创建一个包含时间戳的列:
import pandas as pd
from datetime import datetime
df = pd.DataFrame({'date': [datetime(2020, 10, 1), datetime(2020, 10, 2),
datetime(2020, 10, 3), datetime(2020, 10, 4)],
'value': [1, 2, 3, 4]})
print(df)
输出:
date value
0 2020-10-01 1
1 2020-10-02 2
2 2020-10-03 3
3 2020-10-04 4
你可以看到,我们将datetime对象传递给DataFrame,Pandas会自动将其转换为时间戳类型。
Pandas DataFrame日期范围
如果我们想要使用日期范围来过滤DataFrame,我们可以使用Pandas内置的date_range函数。下面的示例显示了如何在给定的日期范围内创建一个包含日期和时间戳的DataFrame:
import pandas as pd
df = pd.DataFrame({'date': pd.date_range('2020-10-01', periods=4), 'value': [1, 2, 3, 4]})
print(df)
输出:
date value
0 2020-10-01 1
1 2020-10-02 2
2 2020-10-03 3
3 2020-10-04 4
在这个示例中,我们使用date_range来创建一个包含四个日期的date Range,从2020年10月1日开始,持续四天。
Pandas DataFrame时间过滤
Pandas DataFrame中列的值可以通过许多方式进行过滤,包括使用比较运算符或逻辑运算符。为了过滤DataFrame以满足时间条件,我们可以在列上使用比较运算符,如Python中的“>”和“<”。
下面的示例演示了如何过滤出2020年10月2日之后的DataFrame行:
import pandas as pd
from datetime import datetime
df = pd.DataFrame({'date': [datetime(2020, 10, 1), datetime(2020, 10, 2),
datetime(2020, 10, 3), datetime(2020, 10, 4)],
'value': [1, 2, 3, 4]})
df = df[df['date'] > datetime(2020, 10, 2)]
print(df)
输出:
date value
2 2020-10-03 3
3 2020-10-04 4
再看一个使用日期范围和时间过滤的示例。下面的示例创建一个包含日期范围的DataFrame,并将它过滤到2020年10月2日之后的所有行:
import pandas as pd
df = pd.DataFrame({'date': pd.date_range('2020-10-01', periods=4), 'value': [1, 2, 3, 4]})
df = df[df['date'] > '2020-10-02']
print(df)
输出:
date value
2 2020-10-03 3
3 2020-10-04 4
在这个示例中,我们使用date_range函数创建一个包含四个日期的DataFrame,并使用“>”运算符和字符串“2020-10-02”来过滤DataFrame,以仅保留大于2020年10月2日的日期行。
Pandas DataFrame按日期排序
通过使用sort_values函数,我们可以按日期对Pandas DataFrame进行排序。下面的示例演示如何按日期对DataFrame进行升序排序:
import pandas as pd
df = pd.DataFrame({'date': pd.date_range('2020-10-01', periods=4), 'value': [4, 2, 3, 1]})
sorted_df = df.sort_values('date')
print(sorted_df)
输出:
date value
0 2020-10-01 4
1 2020-10-02 2
2 2020-10-03 3
3 2020-10-04 1
在这个示例中,我们使用sort_values函数按日期对DataFrame进行升序排序,其中“date”是我们要按其排序的列名。
另外,我们可以使用sort_values函数的参数ascending来指定排序的顺序。如果将ascending设置为False,则DataFrame将按降序排列。
Pandas DataFrame时间添加
对于日期数据,有时我们需要对其进行加减运算,例如添加一天或一个小时。为此,Pandas提供了一些方法来进行日期计算。
下面的示例演示如何将Pandas DataFrame中的日期加上一天:
import pandas as pd
df = pd.DataFrame({'date': pd.date_range('2020-10-01', periods=4), 'value': [1, 2, 3, 4]})
df['tomorrow'] = df['date'] + pd.to_timedelta('1D')
print(df)
输出:
date value tomorrow
0 2020-10-01 1 2020-10-02
1 2020-10-02 2 2020-10-03
2 2020-10-03 3 2020-10-04
3 2020-10-04 4 2020-10-05
在这个示例中,我们使用to_timedelta函数将“1D”转换为一个timedelta对象,该对象表示一天的时间增量。然后,我们将此timedelta添加到Pandas DataFrame中的“date”列中,创建一个新的“tomorrow”列。
同样,我们也可以使用to_timedelta函数来减去一段时间,例如减去一小时或一个星期。只需将“1H”或“1W”传递给to_timedelta即可。
Pandas DataFrame日期聚合
在实际应用中,经常需要对一个时间序列数据进行聚合,例如按天、按周或按月聚合。Pandas提供了resample函数来执行这些聚合操作。
下面的示例演示如何按周聚合Pandas DataFrame中的日期和值:
import pandas as pd
df = pd.DataFrame({'date': pd.date_range('2020-10-01', periods=14, freq='D'),
'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]})
weekly_df = df.resample('W', on='date').sum()
print(weekly_df)
输出:
value
date
2020-10-04 10
2020-10-11 45
2020-10-18 28
在这个示例中,我们首先使用date_range函数创建一个包含14个连续的日期的DataFrame。然后,我们使用resample函数将这个DataFrame按周聚合,并使用sum函数计算每个周中值的总和。
需要注意的是,在调用resample函数时,我们必须使用on参数指定要进行聚合的日期列。
结论
Pandas提供了许多关于日期和时间的功能,包括创建时间戳、日期范围、排序和聚合。通过这些函数,我们可以轻松地过滤和操作时间序列数据,以更好地分析和理解数据。
在开发Python数据分析应用程序时,Pandas是不可或缺的工具之一。Pandas提供了易于使用的接口和强大的功能,使得处理和分析数据变得简单快捷。
本文介绍了Pandas DataFrame中的日期和时间相关操作,希望能够帮助读者更好地理解和使用Pandas。
极客笔记