【问题标题】:Create Populated Python Dataframe in Loop在循环中创建填充的 Python 数据框
【发布时间】:2022-01-03 10:42:24
【问题描述】:

我有许多 CSV 文件需要进行相同类型的操作。我想编写一个循环,将 .csv 带入 Pandas df,执行一些基本操作,并在整个 python 代码中使用这个数据框(用于其他工作)。 我正在创建空数据框,运行循环并确认在循环中数据框已从 .csv 填充,但当循环完成时,数据框仍然为空。

def r_insight_history_loop(f):
    df_a = pd.DataFrame(columns=['INSTANCE_ID', ' USER_ID'])
    read_file = pd.read_csv(f)
    read_file1 = read_file[['INSTANCE_ID', ' USER_ID']]
    df_a = df_a.append(read_file1)
    print(df_a)
    print('loop complete')


df_a = pd.DataFrame(columns=['INSTANCE_ID', ' USER_ID'])
df_a.info()
g = r"C:\Users\MYCOMPUTER\R_INSIGHT_HISTORY_2_1 (1).csv"
r_insight_history_loop(g)

print(df_a)

所有打印都只是故障排除,以确认循环正在运行。我得到的是:

<class 'pandas.core.frame.DataFrame'>
Index: 0 entries
Data columns (total 2 columns):
 #   Column       Non-Null Count  Dtype 
---  ------       --------------  ----- 
 0   INSTANCE_ID  0 non-null      object
 1    USER_ID     0 non-null      object
dtypes: object(2)
memory usage: 0.0+ bytes
                                   INSTANCE_ID  \
    0     b74eb5ba-dd27-469a-b8ae-e0b6b4f0b71b   
    1     b83859d2-86aa-4e27-b8d6-c72aa24b7465   
    2     28cbafca-bbf6-4218-ad91-5444816b28c6   
    3     eeb598b2-35c5-441c-9a8d-c0095944d423   
    4     70ddbb80-5e9e-4f74-a0cf-2e0841ef68a9   
    ...                                    ...   
    3586  bc181bb9-d1f8-475d-93fa-72cb8f2d29a2   
    
                                                    USER_ID  
 0     b74eb5ba-dd27-469a-b8ae-e0b6b4f0b71b   
    1     b83859d2-86aa-4e27-b8d6-c72aa24b7465   
    2     28cbafca-bbf6-4218-ad91-5444816b28c6   
    3     eeb598b2-35c5-441c-9a8d-c0095944d423   
    4     70ddbb80-5e9e-4f74-a0cf-2e0841ef68a9   
    ...                                    ...      
    3586  bc181bb9-d1f8-475d-93fa-72cb8f2d29a2 
    
    [3587 rows x 2 columns]
    loop complete
    Empty DataFrame
    Columns: [INSTANCE_ID,  USER_ID]
    Index: []

【问题讨论】:

    标签: python pandas dataframe loops


    【解决方案1】:

    在函数内部定义的df_a r_insight_history_loop 是一个局部变量,它隐藏了在函数外部定义的全局df_a。因此,全局 df_a 永远不会更新。最简单但不推荐对你的函数代码进行如下修改

    def r_insight_history_loop(f):
        global df_a # make df_a global
        # df_a = pd.DataFrame(columns=['INSTANCE_ID', ' USER_ID']) # do not need this line
        read_file = pd.read_csv(f)
        read_file1 = read_file[['INSTANCE_ID', ' USER_ID']]
        df_a = df_a.append(read_file1)
        print(df_a)
        print('loop complete')
    

    更简洁的函数版本将df_a 作为参数,更新它并返回结果,如下所示:

    def r_insight_history_loop(f, _df_a):
        read_file = pd.read_csv(f)
        read_file1 = read_file[['INSTANCE_ID', ' USER_ID']]
        _df_a = _df_a.append(read_file1)
        print(_df_a)
        print('loop complete')
        return _df_a
    
    
    df_a = pd.DataFrame(columns=['INSTANCE_ID', ' USER_ID'])
    df_a.info()
    g = r"C:\Users\MYCOMPUTER\R_INSIGHT_HISTORY_2_1 (1).csv"
    df_a = r_insight_history_loop(g, df_a)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多