【发布时间】:2019-07-26 14:15:20
【问题描述】:
我目前正在使用 python pandas 来自动化 excel 操作,并且在处理较大的 excel 文件时遇到了一些速度问题。现在我尝试逐步优化。
我的脚本的第二步创建了 3 个新列:error1、error2 或正确。 如果 DATE2 中没有信息 (NaN),则只有 error1 的值应为“x”。如果 DATE2 中有一个值并且它在 DATE1 之后,则只有 error2 应该具有值“x”。如果这两个比较都没有命中,则只有正确的应该具有值“x”。
我现在的问题是如何对这样的比较进行矢量化,以及如何避免整个字符串转换,因为我认为这也需要更多时间。
要优化的代码:
#step 2 manipulate excel
import arrow
for i,row in df.iterrows():
if str(row['DATE2']) == "nan":
df.loc[i, "ERROR1"] = "x"
for i,row in df.iterrows():
date1str = str(row['DATE1'])[:10]
date1 = arrow.get(date1str, "YYYY-MM-DD").date()
if str(row['DATE2']) != "nan":
date2 = arrow.get(str(row['DATE2'])[:10], 'YYYY-MM-DD').date()
if date2 > date1:
df.loc[i, "ERROR2"] = "x"
for i,row in df.iterrows():
if str(row['ERROR1']) == "nan" and str(row['ERROR2']) == "nan":
df.loc[i, "CORRECT"] = "x"
print("step 2 done...")
我已经尝试过的代码:
def choose(inp):
if pd.isnull(inp):
return "x"
else:
return ""
df['ERROR1'] = choose(df['DATE2'])
我尝试的代码给了我以下错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
【问题讨论】:
标签: python pandas string-comparison