Я читаю данные с нескольких фреймов. Поскольку индексация и входные данные разные, мне нужно повторить сопряжение и анализ. Мне нужны конкретные выходные данные. Это подталкивает меня к копированию вставки и повторению кода.

Существует ли быстрый способ обращения к нескольким фреймам данных для проведения одного и того же анализа?

DF1= pd.read_csv('DF1 Price.csv')
DF2= pd.read_csv('DF2 Price.csv')
DF3= pd.read_csv('DF3 Price.csv') # These CSV's contain main prices

DF1['ParentPrice']   = FamPrices ['Price1'] # These CSV's contain second prices
DF2['ParentPrice']   = FamPrices ['Price2']
DF3['ParentPrice']   = FamPrices ['Price3']

DF1['Difference'] = DF1['ParentPrice'] - DF1['Price'] # Price difference is the output
DF2['Difference'] = DF2['ParentPrice'] - DF2['Price']
DF3['Difference'] = DF3['ParentPrice'] - DF3['Price']```
0
ripintheblue 19 Июн 2019 в 11:36

2 ответа

Лучший ответ

Можно параметризовать строки с помощью f-строк, доступных в python> = 3.6. В строке f можно вставить строковое представление значения переменной внутри строки, как в:

>> a=3
>> s=f"{a} is larger than 11"
>> print(s)
3 is larger than 1!

Ваш код станет:

list_of_DF = []
for symbol in ["1", "2", "3"]:
    df = pd.read_csv(f"DF{symbol} Price.csv")
    df['ParentPrice']   = FamPrices [f'Price{symbol}']
    df['Difference'] = df['ParentPrice'] - df['Price'] 
    list_of_DF.append(df)

Тогда DF1 будет list_of_DF [0] и так далее.

Как я уже говорил, этот ответ действителен, только если вы используете Python 3.6 или более поздней версии.

0
S.L 19 Июн 2019 в 08:57

Для третьей части плохо предлагаю создать что-то вроде

DFS=[DF1,DF2,DF3]
def create_difference(dataframe):
    dataframe['Difference'] = dataframe['ParentPrice'] - dataframe['Price']
for dataframe in DFS:
    create_difference(dataframe)

Во-вторых, нет такого супер-удобного и короткого пути, о котором я мог бы подумать, разве что

for i in range len(DFS) :
    DFS[i]['ParentPrice'] = FamPrices [f'Price{i}']
0
Igor sharm 19 Июн 2019 в 08:58