我有一个excel电子表格,可以每天查看当年的特定业务指标。在我的csv中,我有一个date列,其中包含从今年初到最后一年的日期,以及用于分析的指标的其他列。虽然date列具有整个年份的值,但metrics列在当前年份中当前日期之后的每一天都有空白单元格。对于我的分析,我只想分析设置为指标列中不为空的最后一个值的数据。我以为我可以通过用np.nan
替换“空白”,然后仅用数字过滤我的系列来实现此目的,但是我认为这不是正确的方法,因为我收到一个错误。有更好的方法吗?
当前尝试出现错误:
df_raw = df_raw.replace('', np.nan, inplace=True)
print(df_raw.tail())
AttributeError: 'NoneType' object has no attribute 'tail'
这是我的数据:
date | cost | impression | ...
2 2018-01-01 $209492.29 14,9232
3 2018-01-02 $3248492.29 482,293
....
365 2018-12-30
366 2018-12-31
代码:
df_raw = pd.DataFrame(sheet.get_all_values(),columns=sheet.get_all_values()[1])
# exclude header(s) from row count NEEDS TO BE UPDATED BASED ON DATA SET
df_raw = df_raw.drop(df_raw.index[[0,1]])
# convert date column to datetime format
df_raw['date'] = pd.to_datetime(df_raw['date'])
# convert blank rows with nan
df_raw = df_raw.replace('', np.nan, inplace=True)
print(df_raw.tail())
答案 0 :(得分:1)
inplace
应该进行替换而无需额外的df_raw =
。请注意,文档说“如果为True,则返回呼叫者”。对于这个参数。参见:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html
我怀疑这是问题所在。
答案 1 :(得分:1)
这取决于数据...
如果您已经将所有空格都转换为np.nan,并且知道指标字段在当前日期之前始终会有一个值,那么您可以运行...
df = df.dropna() #Drop all rows containing nan
#or you could run
df.dropna(thresh=2) #Drop row if it does not have at least two values that are **not** NaN