我有一个带有几列数据的pandas数据帧,我正在传递给MSSQL。我的主键是一个文件名,它在2014年3月27日更改了格式。我在我的数据框中以编程方式创建了这个文件名,但我需要考虑这两个版本(一种格式在3月27日创建的文件之前和之后, 3月27日之后所有文件的其他文件。)
如何遍历每一行并有条件地设置我的文件名列?我的数据框中有一个datetime列,它具有正确的日期时间格式。我只是不知道如何比较更改日期,然后有条件地创建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)
答案 0 :(得分:2)
您可以只过滤要分配的行,而不是迭代,而是分配给所有行。这将更快,并利用熊猫的力量:
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