【发布时间】:2015-12-31 02:29:50
【问题描述】:
我从 205MB 的 csv(大约 110 万行 x 15 列)创建了一个 pandas 数据框。它包含一个名为starttime 的列,它是dtype object(更准确地说是一个字符串)。格式如下:7/1/2015 00:00:03。
我想从这个 pandas 数据框创建两个新的数据框。一个应包含与周末日期对应的所有行,另一个应包含与工作日日期对应的所有行。
周末日期是:
weekends = ['7/4/2015', '7/5/2015', '7/11/2015', '7/12/2015',
'7/18/2015', '7/19/2015', '7/25/2015', '7,26/2015']
我试图将字符串转换为日期时间 (pd.to_datetime),希望这会使值更易于解析,但是当我这样做时,它挂了很长时间,以至于我最终重新启动了几次内核。
然后我决定使用df["date"], df["time"] = zip(*df['starttime'].str.split(' ').tolist()) 在原始数据框中创建两个新列(一列用于日期,一列用于时间)。接下来我想我会使用布尔测试将周末记录(根据新的date 字段)“标记”为True 和所有其他False 并创建另一个包含这些值的列,然后我就可以按True 和False 分组。
例如,
test1 = bikes['date'] == '7/1/2015' 为 2015 年 7 月 1 日的所有值返回 True,但我不知道如何迭代 weekends 中的所有项目,以便我得到所有周末日期的 True。我试过这个并打破了Python(再次挂起):
for i in weekends:
for k in df['date']:
test2 = df['date'] == i
如果有任何帮助(包括我的逻辑和代码),我将不胜感激。
【问题讨论】:
-
您应该能够在读取 csv 时解析该字符串,因此如果您将列名或序数值传递给
read_csv,那么它将以日期时间的形式读取:@987654338 @ 应该可以工作,然后你可以打电话给df['starttime'].dt.dayofweek,所有的周末都将是那些在[5,6]中值的周末 -
@EdChum 感谢您的建议,但我收到了
Can only use .dt accessor with datetimelike values错误。我认为那是因为starttime是一个字符串。 -
您还没有说明您是否已经尝试使用
parse_dates解析字符串,就像我说的那样,您需要在从 csv 读取时解析,作为后处理步骤某些原因导致您的计算机死机,这是不应该的 -
@EdChum 我完全按照您的指示并收到了该消息。
-
@EdChum 我错过了括号。您的解决方案效果很好。谢谢。