【问题标题】:create dynamically dataframes动态创建数据框
【发布时间】:2017-11-15 12:30:20
【问题描述】:

我在一个文件夹中有一组 csv 文件,我想动态创建与 csv 文件同名的数据框

例如,我有以下文件: AC201703.csv AC201703.csv AC201704.csv 我想将这些文件加载​​到具有相同名称的数据框中,例如AC201703 AC201704 我尝试像下面这样使用 exec

for file in glob.glob("*.csv"):
   df = pd.read_csv(file,encoding = 'ISO-8859-1' )
   exec("%s = %s" % (file[:7],df)) 

但它不起作用,我收到以下错误

  File "<ipython-input-31-2d670638b427>", line 4, in <module>
    exec("%s = %s" % (file[:7],df))

  File "<string>", line 1
    A201610 =        A201610_fb_act_n_n_buy cust_key  A201610_fb_act_n_n LCELGST  \
                                                   ^
SyntaxError: invalid syntax

它似乎将 csv 列的名称分配给变量 A201610

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我认为最好使用dict of DataFrames:

    d = {file[:7] : pd.read_csv(file, encoding = 'ISO-8859-1') for file in glob.glob("*.csv")}
    

    然后按键选择DataFrame - 文件名的前7个字母:

    print (d['AC20170'])
    

    但如果不想使用dicts:

    for file in glob.glob("*.csv"):
        globals()[file[:7]] = pd.read_csv(file,encoding = 'ISO-8859-1')
    
    print (AC20170)
    

    【讨论】:

    • @pyd - 真的很难,有必要进行一些模糊匹配,我不知道有什么好的快速解决方案:(我尝试找到一些difflib 解决方案,例如df2['values'].dropna().apply(lambda x: difflib.get_close_matches(x, df1['Names'])),但它失败了:(跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2019-06-25
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多