循环遍历不同的Pandas Dataframes

时间:2016-12-23 14:38:20

标签: python pandas dataframe

我是Python的新手,并且可能是一个基本问题。

我导入了许多Pandas Dataframes,其中包含不同行业的库存数据。所以所有列都是相同的,只是使用不同的数据框名称。

我需要在一些列上做很多不同的小操作,我可以一次弄清楚如何在一个Dataframe上做,但我需要弄清楚如何循环不同的帧并做每个人都有相同的操作。

例如对于一个DF我做:

ConsumerDisc['IDX_EST_PRICE_BOOK']=1/ConsumerDisc['IDX_EST_PRICE_BOOK']
ConsumerDisc['IDX_EST_EV_EBITDA']=1/ConsumerDisc['IDX_EST_EV_EBITDA']
ConsumerDisc['INDX_GENERAL_EST_PE']=1/ConsumerDisc['INDX_GENERAL_EST_PE']
ConsumerDisc['EV_TO_T12M_SALES']=1/ConsumerDisc['EV_TO_T12M_SALES']
ConsumerDisc['CFtoEarnings']=ConsumerDisc['CASH_FLOW_PER_SH']/ConsumerDisc['TRAIL_12M_EPS']

而不是仅仅为接下来的10个扇区复制和粘贴此代码,我想以某种方式在循环中进行,但我无法弄清楚如何通过变量访问df,例如:

CS=['ConsumerDisc']
CS['IDX_EST_PRICE_BOOK']=1/CS['IDX_EST_PRICE_BOOK'] 

所以我可以创建一个df名称列表并循环遍历它。

希望你能举一个小例子来说明这一点。

2 个答案:

答案 0 :(得分:2)

你可能正在寻找像这样的东西

for df in (df1, df2, df3):
    df['IDX_EST_PRICE_BOOK']=1/df['IDX_EST_PRICE_BOOK']
    df['IDX_EST_EV_EBITDA']=1/df['IDX_EST_EV_EBITDA']
    df['INDX_GENERAL_EST_PE']=1/df['INDX_GENERAL_EST_PE']
    df['EV_TO_T12M_SALES']=1/df['EV_TO_T12M_SALES']
    df['CFtoEarnings']=df['CASH_FLOW_PER_SH']/df['TRAIL_12M_EPS']

这里我们迭代我们放在元组数据结构中的数据帧,这有意义吗?

答案 1 :(得分:0)

你的意思是这样吗?

import pandas as pd
d = {'a' : pd.Series([1, 2, 3, 10]), 'b' : pd.Series([2, 2, 6, 8])}
z = {'d' : pd.Series([4, 2, 3, 1]), 'e' : pd.Series([21, 2, 60, 8])}
df = pd.DataFrame(d)
zf = pd.DataFrame(z)

df.head()

    a  b
0   1  2
1   2  2
2   3  6
3  10  8

df = df.apply(lambda x: 1/x)

df.head()

      a         b
0   1.0  0.500000
1   2.0  0.500000
2   3.0  0.166667
3  10.0  0.125000

您有更多功能,因此您可以创建一个功能,然后只需apply每个DataFrame。或者,您也可以将这些lambda函数仅应用于特定列。因此,假设您只想将1 /列应用于每一列,但最后一个(通过您的示例,我假设它最终)您可以df.ix[:, :-1].apply(lambda x : 1/x)