【发布时间】:2018-01-08 18:31:41
【问题描述】:
我想按日期过滤一个相当大的 Pandas 数据框(大约 300 万行)。 由于某种原因,与布尔标准一起使用的 drop 方法根本不起作用。它只是返回相同的旧数据框。不过删除单行也没问题。
这是最初使用的代码,基本上什么都不做:
import pandas as pd
#open the file
df = pd.read_csv('examplepath/examplefile.csv', names=['File Name','FileSize','File Type','Date Created','Date Last Accessed','Date Last Modified','Path'],\
delimiter=';', header=None, encoding="ISO-8859-1",)
#convert to german style date
df['Date Created'] = pd.to_datetime(df['Date Created'], dayfirst=True)
#drop rows and assign new dataframe
df_filtered = df.drop(df[df['Date Created'] > datetime(2010,1,1)])
然后我想出了这个代码,它看起来就像一个魅力:
import pandas as pd
#open the file
df = pd.read_csv('examplepath/examplefile.csv', names=['File Name','FileSize','File Type','Date Created','Date Last Accessed','Date Last Modified','Path'],\
delimiter=';', header=None, encoding="ISO-8859-1",)
#convert to german style date
df['Date Created'] = pd.to_datetime(df['Date Created'], dayfirst=True)
#select rows and assign new dataframe
df_filtered = df['Date Created'] < datetime(2010,1,1)
理论上两个代码应该做同样的事情,对吧? 是首选代码之一吗?我可以只使用我的第二个代码吗?将来我可能需要添加第二个过滤日期。
我希望有人可以帮助我。
感谢和最好的问候, 斯蒂芬
【问题讨论】:
-
您想在同一列/数据框中过滤日期,还是想以任何其他格式检索?
-
df_filtered = df['Date Created'] < datetime(2010,1,1)生成一个布尔值系列。如果您想使用它从df中选择行,请使用df_filtered = df.loc[df['Date Created'] < datetime(2010,1,1)]。
标签: python pandas dataframe data-science