<p>我认为问题是这样的:</p>
<pre class="lang-py prettyprint-override"><code>df['DATE OPENED'] = pd.to_datetime(df['DATE OPENED'], errors='ignore')
</code></pre>
<p><code>errors='ignore'</code>似乎以原始形式返回整个序列,因此该列中的任何字符串都不会转换为datetime对象。我建议使用<code>errors='coerce'</code>将“WIP”stings更改为NaT对象,并且您必须更新您的函数来处理该问题,但类似的方法应该可以工作:</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
df = pd.DataFrame(
dict(
INV_NUM = [1,2,3,4],
LOCATION = "North North South West".split(),
CREATED_DATE = "10/10/2020 10/11/2020 10/12/2020 10/13/2020".split(),
DATE_OPENED = "10/11/2020 10/11/2020 10/01/2020 WIP".split(),
))
def date_test(row):
if row['DATE_OPENED'] is pd.NaT:
return 'Closed'
if row['CREATED_DATE'] < row['DATE_OPENED']:
return 'Closed'
if row['CREATED_DATE'] >= row['DATE_OPENED']:
return 'Open'
else:
return 0000
df['DATE_OPENED'] = pd.to_datetime(df['DATE_OPENED'], errors='coerce')
df['CREATED_DATE'] = pd.to_datetime(df['CREATED_DATE'], errors='raise')
df['STATUS'] = df.apply(lambda row: date_test(row), axis=1)
</code></pre>
<p><a href="http://pythontutor.com/visualize.html#code=import%20pandas%20as%20pd%0A%0A%0Adf%20%3D%20pd.DataFrame%28%0A%20%20%20%20dict%28%0A%20%20%20%20%20%20%20%20INV_NUM%20%3D%20%5B1,2,3,4%5D,%0A%20%20%20%20%20%20%20%20LOCATION%20%3D%20%22North%20North%20South%20West%22.split%28%29,%0A%20%20%20%20%20%20%20%20CREATED_DATE%20%3D%20%2210/10/2020%2010/11/2020%2010/12/2020%2010/13/2020%22.split%28%29,%0A%20%20%20%20%20%20%20%20DATE_OPENED%20%3D%20%2210/11/2020%2010/11/2020%2010/01/2020%20WIP%22.split%28%29,%0A%29%29%0A%0Adef%20date_test%28row%29%3A%0A%20%20%20%20if%20row%5B%27DATE_OPENED%27%5D%20is%20pd.NaT%3A%0A%20%20%20%20%20%20%20%20return%20%27Closed%27%0A%20%20%20%20if%20row%5B%27CREATED_DATE%27%5D%20%3C%20row%5B%27DATE_OPENED%27%5D%3A%0A%20%20%20%20%20%20%20%20return%20%27Closed%27%0A%20%20%20%20if%20row%5B%27CREATED_DATE%27%5D%20%3E%3D%20row%5B%27DATE_OPENED%27%5D%3A%0A%20%20%20%20%20%20%20%20return%20%27Open%27%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20return%200000%0A%0Adf%5B%27DATE_OPENED%27%5D%20%3D%20pd.to_datetime%28df%5B%27DATE_OPENED%27%5D,%20errors%3D%27coerce%27%29%0Adf%5B%27CREATED_DATE%27%5D%20%3D%20pd.to_datetime%28df%5B%27CREATED_DATE%27%5D,%20errors%3D%27raise%27%29%0A%0Adf%5B%27STATUS%27%5D%20%3D%20df.apply%28lambda%20row%3A%20date_test%28row%29,%20axis%3D1%29&cumulative=false&curInstr=8&heapPrimitives=false&mode=display&origin=opt-frontend.js&py=py3anaconda&rawInputLstJSON=%5B%5D&textReferences=false" rel="nofollow noreferrer">step through the code in python tutor</a></p>
<p>编辑:
如果您想保留<code>errors='ignore'</code>和那些“WIP”字符串,那么这应该可以:</p>
<pre class="lang-py prettyprint-override"><code>df['DATE_OPENED'] = df['DATE_OPENED'].apply(
lambda x: pd.to_datetime(x, errors='ignore')
)
</code></pre>
<p><a href="http://pythontutor.com/visualize.html#code=import%20pandas%20as%20pd%0A%0A%0Adf%20%3D%20pd.DataFrame%28%0A%20%20%20%20dict%28%0A%20%20%20%20%20%20%20%20INV_NUM%20%3D%20%5B1,2,3,4%5D,%0A%20%20%20%20%20%20%20%20LOCATION%20%3D%20%22North%20North%20South%20West%22.split%28%29,%0A%20%20%20%20%20%20%20%20CREATED_DATE%20%3D%20%2210/10/2020%2010/11/2020%2010/12/2020%2010/13/2020%22.split%28%29,%0A%20%20%20%20%20%20%20%20DATE_OPENED%20%3D%20%2210/11/2020%2010/11/2020%2010/01/2020%20WIP%22.split%28%29,%0A%29%29%0A%0Adef%20date_test%28row%29%3A%0A%20%20%20%20if%20row%5B%27DATE_OPENED%27%5D%20%3D%3D%20%27WIP%27%3A%0A%20%20%20%20%20%20%20%20return%20%27Closed%27%0A%20%20%20%20if%20row%5B%27CREATED_DATE%27%5D%20%3C%20row%5B%27DATE_OPENED%27%5D%3A%0A%20%20%20%20%20%20%20%20return%20%27Closed%27%0A%20%20%20%20if%20row%5B%27CREATED_DATE%27%5D%20%3E%3D%20row%5B%27DATE_OPENED%27%5D%3A%0A%20%20%20%20%20%20%20%20return%20%27Open%27%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20return%200000%0A%0Adf%5B%27DATE_OPENED%27%5D%20%3D%20df%5B%27DATE_OPENED%27%5D.apply%28lambda%20x%3A%20pd.to_datetime%28x,%20errors%3D%27ignore%27%29%29%0Adf%5B%27CREATED_DATE%27%5D%20%3D%20pd.to_datetime%28df%5B%27CREATED_DATE%27%5D,%20errors%3D%27raise%27%29%0A%0Adf%5B%27STATUS%27%5D%20%3D%20df.apply%28lambda%20row%3A%20date_test%28row%29,%20axis%3D1%29&cumulative=false&curInstr=8&heapPrimitives=false&mode=display&origin=opt-frontend.js&py=py3anaconda&rawInputLstJSON=%5B%5D&textReferences=false" rel="nofollow noreferrer">python tutor link 2</a></p>