如何根据日期有条件地设置数据框的值

2 投票
1 回答
3416 浏览
提问于 2025-04-18 13:24

我有一个 pandas 数据框,里面有几列数据,我要把这些数据传到 MSSQL。我的主键是一个文件名,这个文件名的格式从2014年3月27日开始发生了变化。我在数据框中是通过编程来生成这个文件名的,但我需要考虑到两种格式(一个是2014年3月27日之前和包括那天创建的文件,另一个是3月27日之后的所有文件)。

我该如何遍历每一行,并根据条件设置我的文件名列呢?我的数据框里有一个日期时间列,格式是正确的日期时间。我只是不知道怎么去比较这个变更的日期,然后有条件地创建 df[FileName]。

感谢 @EdChum!

dateOfChange = datetime.date(2014, 03, 27)        

df.loc[df['DateTime'] > dateOfChange, 'FileName'] = df.BAC.map(str) + '_' + df.Year.map("{:04}".format, str) + df.Month.map("{:02}".format, str) + df.Day.map("{:02}".format, str) + df.Hour.map("{:02}".format, str) + df.Minute.map("{:02}".format, str) + df.Second.map("{:02}".format, str) + "_" + df.NumberDialed.map(str)
df.loc[df['DateTime'] <= dateOfChange, 'FileName'] = df.BAC.map(str) + '_' + df.Year.map("{:04}".format, str) + df.Month.map("{:02}".format, str) + df.Day.map("{:02}".format, str) + df.Hour.map("{:02}".format, str) + df.Minute.map("{:02}".format, str) + df.Second.map("{:02}".format, str)

1 个回答

2

与其一个一个地遍历,不如直接筛选出你想要的行,然后一次性给它们赋值。这样做会快很多,而且能充分利用Pandas的强大功能:

df.loc[df['DateTime'] > dateOfChange, 'FileName'] = someVal
df.loc[df['DateTime'] <= dateOfChange, 'FileName'] = otherVal

这里我们使用了 loc 来进行标签索引,具体可以查看文档: http://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-label

撰写回答