我要在熊猫中加载不同的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,这给了我[$]?
)。我被困住了
有什么想法吗?
感谢任何帮助。
欢呼
答案 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块中,从而可以处理损坏的文件。