优雅的方式与多个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

回到顶部