下面的函数接受一个文件并删除列名row_num
、start_date
和end_date
。
问题是不是每个文件都有这些列名,所以函数返回一个错误。
我的目标是修改代码,以便在这些列存在时删除它们,而在某个列不存在时不返回错误。
def read_df(file):
df = pd.read_csv(file, na_values=['', ' '])
# Drop useless junk and fill empty values with zero
df = df.drop(['row_num','start_date','end_date','symbol'], axis=1).fillna(0)
df=df[df!=0][:-1].dropna().append(df.iloc[-1])
return df
6条答案
按热度按时间zaq34kh61#
将参数
errors
添加到DataFrame.drop
:错误:{“忽略”,“提高”},默认值为“提高”
如果为“ignore”,则隐藏错误,并且仅删除现有标签。
样品:
jrcvhitl2#
只要用Pandas滤镜,Python的方式
奇怪的是,没有答案使用
pandas
Dataframefilter method
这将从
df
中存在的drop_list
创建筛选器,然后从axis=1
上的df
inplace
删除thisFilter
例如,删除与
drop_list
匹配的列,如果这些列不存在,则不出错oxcyiej73#
在我的测试中,下面的答案至少和给出的任何一个答案一样快:
它具有可读性的优点,并且(对代码进行了一点调整)能够准确记录哪些列存在/何时删除。
这可能比先前的解决方案更可取的一些原因是:
基准测试结果:
基准测试的代码(this question中给出了如何创建此类基准测试的答案):
zvokhttg4#
我不得不这么做我是这样做:
也许不是最好的方法,但它达到了它的目的。
j7dteeu85#
要检查列是否存在,可以执行以下操作:
或
irtuqstp6#
使用
df.columns.intersection
表示速度df.columns.intersection
是一个内置方法,用于排除缺少的列:通过
df.columns.intersection
删除非常快,即使丢失的列数增加也是如此:定时数据: