在df循环函数之外,使df列永久地成为唯一的一列。

问题描述 投票:0回答:1

注:更正 - 代码返回 AttributeError: 'str' 对象没有属性 'drop_duplicates' 。

我正试图循环浏览一些dfs,并将我的 "user_id "列用 df.drop_duplicates(subset =['user_id']函数。

我需要将其作为一个全局变化,并试图将其整合到我的函数中,该函数导入.csv文件并将其分配到文件名中。这样做很完美,但是当我尝试添加drop_duplicates函数时,它似乎没有任何作用。

def assign_vars(files = os.listdir()):
    # Make list of variable names using file name
    variables = [make_var(file) for file in files]
    # Start list to place dfs into
    dfs = []
    for var,file in zip(variables,files):
        # Use globals to assign dfs to file names
        globals()[var] = pd.read_csv(file)
        #<<1>>
        # Add each newly made df var to a list
        dfs.append(var.drop_duplicates(subset =['user_id'])) # rmv duplicates
    return print('Your variables are: ',sorted(dfs))

这将返回一个属性错误.似乎var被当作一个str而不是df来处理

当我 len() a df,他们仍然和以前一样。即使当我单独 df.drop_duplicates 它们缩短 len() 70%左右。

或者,我试着在<<1>>处做一个中间对象,然后在<<1>>处做一个中间对象。.drop_duplicates. 这不工作,我相信这是因为变化是保持本地。

python pandas global-variables unique drop-duplicates
1个回答
0
投票

修复

增加 .drop_duplicates(subset =['user_id']) 到最后的csv导入,因为他们成为全球化的似乎做的伎俩。

def assign_vars(files = os.listdir()):
    # Make list of variable names using file name
    variables = [make_var(file) for file in files]
    # Start list to place dfs into
    dfs = []
    for var,file in zip(variables,files):
        # Use globals to assign dfs to file names
        globals()[var] = pd.read_csv(file).drop_duplicates(subset =['user_id'])
        # Add each newly made df var to a list
        dfs.append(var) # rmv duplicates
    return print('Your variables are: ',sorted(dfs))
© www.soinside.com 2019 - 2024. All rights reserved.