关于存储在字典中的多个数据帧:python/pandas

Multiple dataframes stored in dictionary - Python/Pandas

我有不同的csv和excel文件要在pandas中加载,我想动态地创建加载结构(例如:df1 = pd.read_csv(xxxxx))所以我在循环浏览文件,创建命令并将它们存储在字典中。

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

如果我使用exec和eval,这是可行的,但我正在寻找替代方案。到目前为止:创建命令。

1
2
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'''"'"+')')

然后,我创建了一个新的dict,只使用基于df_list[X]的,以便稍后操作它,但它再次被存储为一个字符串。我尝试过不同的方法(例如ast.literal评估,它给了我ValueError: malformed node or string)。我被卡住了

有什么想法吗?

感谢任何帮助。

干杯


你可以试试这个

1
2
3
4
5
6
7
8
9
10
11
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']

你可以通过它来访问dataframes操控他们的路径等等。


你可以使用字典的理解:

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

所以,如果你想读取Excel文件的命令是一样的,你可以使用

1
2
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}

"豪尔赫的解决方案与环有优势,你可以在每个包read_csva try catch块,所以你可以把损坏的文件。