字典中存储了多个数据框-Python / Pandas

时间:2018-09-21 03:52:12

标签: python pandas dataframe

我要在熊猫中加载不同的csv和excel文件,我想知道动态创建加载结构(例如:df1 = pd.read_csv(xxxxx)) 所以我遍历文件并创建命令并将它们存储在字典中。

字典将值存储为字符串的问题,从那里我可以加载csv文件并遍历数据帧。

如果我使用exec和eval可以正常工作,但是我正在寻找替代方法。 至今: 创建命令。

for i in list1:
     df_dic[calendar.month_abbr[int(i[4:6])]] = ''.join('''df_lst_'''+calendar.month_abbr[(int(i[4:6]))]+''' = pd.read_excel(r'''+"'"+dir1+i+"'"+','+'sheet_name='''''Data'''"'"+')')

然后,我仅基于df_list[X]来创建仅基于ValueError: malformed node or string的新字典,以便稍后对其进行操作,但再次将其存储为字符串。 我尝试了不同的方法(例如ast.literal_eval,这给了我[$]?)。我被困住了

有什么想法吗?

感谢任何帮助。

欢呼

2 个答案:

答案 0 :(得分:1)

可以尝试一下

def load_csvs(*paths):
    dfs = {}
    for path in paths:
        dfs[path] = pd.read_csv(path)
    return dfs

if __name__ == '__main__':
    paths = ['foo.csv', 'bar.csv']
    dfs = load_csvs(paths)
    # Access the foo.csv dataframe as foo_df
    foo_df = dfs['foo.csv']

您可以通过其路径访问数据框以进行操作等等。

答案 1 :(得分:0)

您可以使用dict理解:

import pandas as pd
paths = ['file1.csv', 'file2.csv']
dfs = {p: pd.read_csv(p) for p in paths}

如果您还想读取Excel文件是相同的命令,则可以使用

paths = ['file1.csv', 'file2.csv', 'excel_file.xls']
dfs = {p: pd.read_csv(p) if p.endswith('.csv') else pd.read_excel(p) for p in paths}

@jorge的带循环的解决方案的优点是,您可以将每个read_csv包装在try-catch块中,从而可以处理损坏的文件。