【发布时间】:2018-12-20 23:30:51
【问题描述】:
我的数据框(df)由 47 列和 30,000 行组成,列在下面
Index(['Unnamed: 0', 'CtpJobId', 'TransformJobStateId', 'LastError',
'PriorityDate', 'QueuedTime', 'AccurateAsOf', 'SentToDevice',
'StartedAtDevice', 'ProcessStart', 'LastProgressAt', 'ProcessEnd',
'OutputFileDuration', 'Tags', 'SegmentId', 'VideoId',
'ClipFirstFrameNumber', 'ClipLastFrameNumber', 'SourceId',
'SourceNamedLocation', 'SourceDirectory', 'SourceFileSize',
'srcMediaFormat', 'srcFrameRate', 'srcWidth', 'srcHeight', 'srcCodec',
'srcDuration', 'TargetId', 'TargetNamedLocation', 'TargetDirectory',
'TargetFilename', 'Description', 'TargetTags', 'tgtFrameRate',
'tgtDropFrame', 'tgtWidth', 'tgtHeight', 'tgtCodec', 'DeviceType',
'DeviceResourceId', 'AssignedDeviceId', 'DeviceName',
'AssignedDeviceJobId', 'DeviceUri'],
dtype='object')
我想为选择性列或该数据框应用一个函数来创建一个名为 df['seg_duration'] 的新列,所以我的函数如下
def seq_duration(df):
if ClipFirstFrameNumber is not None and ClipLastFrameNumber is not None:
fn = ClipLastFrameNumber -ClipFirstFrameNumber
if FrameRate =='23.98' and DropFrame == 'False' :
fps = 24 / 1.001
elif FrameRate == '24' and DropFrame == 'False':
fps = 24
elif FrameRate == '25'and DropFrame == 'False':
fps = 25
elif FrameRate == '29.97':
fps = 30 / 1.001
elif FrameRate == '30' and DropFrame == 'False':
fps = 30
elif FrameRate == '59.94':
fps = 60 / 1.001
Duration = fn/fps
elif srcDuration is not None:
Duration = srcDuration
else:
None
该函数实际上有 3 种情况,在一种情况下有很多条件,所以首先我将 ClipLastFrameNumber 中的值减去 ClipFirstframeNumber 列并将其保存到 fn 变量。并应用其他逻辑,与 srcDuration 相同的是列及其值。比如下面
ClipLastFrameNumber ClipFirstFrameNumber tgtDropFrame tgtFrameRate
NaN NaN True 29.97
NaN NaN True 29.97
NaN NaN True 29.97
34354.0 28892.0 True 29.97
当我如下应用此功能时
df['seg_duration']=df.apply(seq_duration)
我收到错误NameError: ("name 'ClipFirstFrameNumber' is not defined", 'occurred at index Unnamed: 0')
这是为 pandas 编写函数的正确方法,或者我如何将这个函数用于该数据框并实现我的目标,即基于该函数创建一个新列 df['seg_dur']。提前致谢
【问题讨论】:
-
这里发生了很多事情。
seq_duration需要为一行定义,而不是数据框;它还需要在最后返回一些东西。然后你想应用axis = 1传递给apply的函数。
标签: python python-3.x pandas data-science