对不同的数据帧应用相同的操作

2024-05-23 13:46:23 发布

您现在位置:Python中文网/ 问答频道 /正文

找不到任何关于这是Python的东西。。。 我一直在为一些机器学习项目研究三种不同的数据集,在不同的数据帧上以完全相同的方式为相同的操作键入相同的命令是一项艰巨的任务。。。从这个开始:

aviva =  pd.read_csv('data/LON_AV_.csv', parse_dates=['Date'], index_col='Date', date_parser=dateparse )
admiral= pd.read_csv('data/LON_ADM.csv', parse_dates=['Date'], index_col='Date', date_parser=dateparse )
three =  pd.read_csv('data/LON_III.csv', parse_dates=['Date'], index_col='Date', date_parser=dateparse )

中间有许多应用于每个数据帧的相同命令

结果是:

three.to_csv('three_x.csv')
three_label.to_csv('three_y.csv')

admiral.to_csv('admiral_x.csv')
admiral_label.to_csv('admiral_y.csv')

aviva.to_csv('aviva_x.csv')
aviva_label.to_csv('aviva_y.csv')

我的问题是,你们有没有办法加快这个过程,这样我就不必一直重复这样的代码? 谢谢你们,祝你们今天愉快


Tags: csvto数据readdatadateindexparse
2条回答

不要使用三个数据帧avivaadmiralthree,而是使用一个dict具有映射到数据帧的相同名称的键:

dfs = dict()
for filename, name in [('LON_AV_.csv', 'aviva'), 
                       ('LON_ADM.csv', 'admiral'), 
                       ('LON_III.csv', 'three')]:
    dfs[name] = pd.read_csv('data/{}'.format(filename), parse_dates=['Date'], 
                            index_col='Date', date_parser=dateparse)

    ...

    dfs[name].to_csv('{}_x.csv'.format(name))
    label[name].to_csv('{}_y.csv'.format(name))

我会这样做:

in_csv_template = 'data/LON_{}.csv'
out_csv_template = 'out/{}_x.csv'
out_label_template = 'out/{}_y.csv'

cfg = {
    'aviva': 'AV_',
    'admiral': 'ADM',
    'three': 'III',
}

def process(fi_csv, fo_csv, fo_label, **kwargs):
    df = pd.read_csv(fi_csv, **kwargs)

    ...

    df.to_csv(fo_csv)
    df_label.to_csv(fo_label)


for k,v in cfg.items():
    process(in_csv_template.format(v),
            out_csv_template.format(k),
            out_label_template.format(k),
            parse_dates=['Date'],
            index_col='Date',
            date_parser=dateparse)

相关问题 更多 >