Pandas循环处理DataFrame列表时过滤操作不生效的问题咨询
Pandas循环处理DataFrame列表时过滤操作不生效的问题咨询
各位好,我平时处理多个需要做相似修改的DataFrame时,都会用for循环来快速搞定,避免重复写一堆相同的代码。我也明白,循环里对df做的修改有时候只是作用在副本上,所以像dropna这种方法我会用inplace=True参数来解决这个问题,但碰到过滤行这种操作时,就没这么方便的参数可用了。
我现在要过滤掉to Converted列日期早于now的行,单独在循环外做这个过滤是能正常生效的,所以不是数据类型不对或者没有符合条件的数据的问题。下面是我试的几种代码写法,想请教下大家:到底是我哪里理解错了,还是这里有什么特定的限制?如果是后者,各位有经验的大佬都是怎么处理这种场景的呢?
原始代码
now = pd.to_datetime(date.today(), format='%Y%m%d') for df in df_list: df.dropna(how='all', axis=1, inplace=True) df['Valid From Converted'] = pd.to_datetime(df['Valid From'], format='%Y%m%d') df['to Converted'] = pd.to_datetime(df['to'], format='%Y%m%d') df = df[df['to Converted'] >= now]
用enumerate的写法
now = pd.to_datetime(date.today(), format='%Y%m%d') for i, df in enumerate(df_list): df.dropna(how='all', axis=1, inplace=True) df['Valid From Converted'] = pd.to_datetime(df['Valid From'], format='%Y%m%d') df['to Converted'] = pd.to_datetime(df['to'], format='%Y%m%d') df = df[df['to Converted'] >= now] df_list[i] = df
用range遍历索引的写法
for i in range(len(df_list)): df_list[i].dropna(how='all', axis=1, inplace=True) df_list[i]['Valid From Converted'] = pd.to_datetime(df_list[i]['Valid From'], format='%Y%m%d') df_list[i]['to Converted'] = pd.to_datetime(df_list[i]['to'], format='%Y%m%d') df_list[i] = df_list[i][df_list[i]['to Converted'] >= now]
备注:内容来源于stack exchange,提问作者kawuel
相关产品推荐
相关产品推荐

