2016-12-23 3 views
0

im new для Python, и у вас есть вопрос, который, вероятно, является основой.Петля через различные ПАНДЫ 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 секторов, я хочу сделать это в цикле как-то, но я не могу понять как получить доступ к ФР через переменную, например:

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

, так что я мог бы просто создать список имен ДФ и петли через него.

Надеюсь, вы можете привести небольшой пример того, как это сделать.

+0

Как вы импортируете свои данные? – x0s

+0

Создайте функцию для выполнения этих действий на фрейме данных и повторите результат для функции почты. то вы можете вызвать эту функцию для нескольких фреймов данных. – Shijo

ответ

0

Вы, вероятно, ищете что-то вроде этого

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'] 

Здесь мы Перебор в dataframes, что мы попали в кортеж datasctructure, значит ли это смысл?

+0

Благодарим вас за помощь! Очень ценим! Это решение именно то, что я искал! –

+0

Отметьте это как правильный ответ, нет? – xtian

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. Кроме того, вы можете применять эти лямбда-функции только к определенным столбцам. Поэтому давайте скажем, что вы хотите применять только 1/столбец к каждому столбцу, но последний (по вашему примеру, я предполагаю, что он в конце) вы можете сделать df.ix[:, :-1].apply(lambda x : 1/x).

Смежные вопросы