优雅的方式与多个dataframes工作,大熊猫
我有一些代码目前看起来是这样的:优雅的方式与多个dataframes工作,大熊猫
if os.path.isfile('D:\\df_1'): df_1 = pd.read_pickle('D:\\df_1')
else:
df_1 = pd.DataFrame(columns = ['Date', 'Location', 'Product'])
if os.path.isfile('D:\\df_2'):
df_2 = pd.read_pickle('D:\\df_2')
else:
df_2 = pd.DataFrame(columns = ['Date', 'Location', 'Product'])
[...]
if os.path.isfile('D:\\df_20'):
df_20 = pd.read_pickle('D:\\df_20')
else:
df_20 = pd.DataFrame(columns = ['Date', 'Location', 'Product'])
基本上我做的是检查,如果数据帧已经存在,如果它不加载它否则创建一个空的数据框。我需要这样做,因为代码会尝试将新数据附加到每个数据帧。所以,我会碰到这样的:
[retrieve new data and clean it] df_1 = pd.concat([df_1, df_1_new_data])
这样做对所有的20个dataframes我有(它们含有不同的东西,所以我想将它们分开),然后将其保存,以当日再次检索它们并添加新的数据给他们:
df_1.to_pickle('D:\\df_1') df_2.to_pickle('D:\\df_2')
[...]
df_20.to_pickle('D:\\df_20')
现在,它已经非常沉重,做20个数据帧,但我可能需要添加更多!有没有办法读取不同的数据框,然后将它们写入for循环或类似的东西?那么为了减少我现在有许多简单的2行代码循环的代码行?谢谢!
回答:
DRY:你不应该多次写相同的东西(不止一次)。
使用函数,循环,其他基本语言工具。
def create_df(path): if os.path.isfile(path):
df = pd.read_pickle(path)
else:
df = pd.DataFrame(columns = ['Date', 'Location', 'Product'])
return df
all_paths = (...)
# dict where key is you path and value is dataframe
all_df = {p: create_df(p) for p in all_paths}
for p in all_paths:
all_df[p].to_pickle(p)
以上是 优雅的方式与多个dataframes工作,大熊猫 的全部内容, 来源链接: utcz.com/qa/264448.html