我有一个 pandas 数据框,其中包含几列数据,我将其传递给 MSSQL。我的主键是一个文件名,该文件名自 2014 年 3 月 27 日起更改了格式。我正在我的数据框中以编程方式创建此文件名,但我需要考虑两个版本(之前的一种格式,包括 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)
最佳答案
您无需迭代,只需过滤要分配的行,然后分配给所有行。这会更快并且利用了 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
关于python - 如何根据日期有条件地设置数据框的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760743/