如何同时更新Python中的多个变量?

时间:2019-01-12 05:06:24

标签: python-3.x pandas

我对Python还是很陌生,我写了一个网络抓取工具,可以将8个不同表的输出输出到8个熊猫数据帧中。我正在从每个数据框中重命名列名,并仅提取其中两个。

            df1.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
            df2.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
            df3.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
            df4.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
            df5.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
            df6.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
            df7.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
            df8.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']

            df_delvol1 = df1[["E", "F"]
            df_delvol2 = df2[["E", "F"]
            df_delvol3 = df2[["E", "F"]
            etc

            writer = pd.ExcelWriter('options_{}.xlsx'.format(pd.datetime.today().strftime('%d %b %y')), engine = 'xlsxwriter') 
            df_delvol1.to_excel(writer,'Sheet1')
            df_delvol2.to_excel(writer,'Sheet2')
            etc

它有效,但是我想知道是否有更有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

如果将所有数据框都放在列表中,则可以遍历它们并应用相同的操作。

看起来像这样,在第一行中,我只是创建一些随机数据帧。

dfs = [pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 8))) for _ in range(8)]

for df in dfs:
    df.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']

df_delvols = [df[["E", "F"]] for df in dfs]

writer = pd.ExcelWriter('options_{}.xlsx'.format(pd.datetime.today().strftime('%d %b %y')), engine = 'xlsxwriter')

for n, df_delvol in enumerate(df_delvols):
    df_delvol.to_excel(writer, 'Sheet{}'.format(n))

答案 1 :(得分:0)

这将为您提供避免冗余代码的想法-

a = [1,2,3]
df1 = pandas.DataFrame(a)
df2 = pandas.DataFrame(a)
df3 = pandas.DataFrame(a)
for var in ['df1.columns', 'df2.columns', 'df3.columns']:
    exec("%s = ['A']" % var)
>>> print(df1.columns)
Index(['A'], dtype='object')

我只解释了一列-'A',但你明白了。