2014-09-05 3 views
0

Я пытаюсь использовать панды для присоединения контента из трех отдельных плоских файлов в один .csv. Одно из полей вывода, «StoreID», основано на отдельном списке значений ID («Stores.txt»). По сути, мне нужно опубликовать объединенную фреймворк в виде серии строк csv и одновременно добавить результаты для каждого идентификатора магазина в третьем столбце. У меня возникают проблемы с синтаксисом итерации. Любая помощь была бы очень признательна!Append Py Pandas Dataframes в один .csv, итерация отдельным списком

import pandas as pd 

items = pd.read_csv("Item_List.csv") 
store_loc = pd.read_csv("Store_Locations.csv") 
stores = open("Stores.txt") 

for i in stores: 
    item_merged = items.merge(store_loc, on='itemCat') 
    item_merged['storeID'] = i 
item_merged.to_csv("stores_items_output.csv", index=False) 

Гипотетический Stores.txt:

3 
5 
6 

Желаемая выход, данный объединенный список пунктов и мест:

itemID,storeLocation,StoreID 
12345,ABCDE,3 
23456,ABCDE,3 
34567,BCDEF,3 
12345,ABCDE,5 
23456,ABCDE,5 
34567,BCDEF,5 
12345,ABCDE,6 
23456,ABCDE,6 
34567,BCDEF,6 
+0

похоже, что вы пытаетесь дублировать комбинированные dfs itemID и storeLocation с каждым StoreID, правильно? было бы лучше конкатенировать их, но установить «StoreID» до конкатенации, в тот момент, когда вы переписываете каждое слияние с последней заданной операцией, так что все ваши строки будут иметь один и тот же «storeID». Я бы просто создал temp df или intial merge, установил столбец «storeID», а затем либо слиял, либо concat с вашим item_merged 'df. – EdChum

ответ

0

Если я понимаю, что вы пытаетесь, проблема в вашем код заключается в том, что вы перезаписываете идентификатор магазина с последним значением, чтобы все они имели одинаковый идентификатор магазина.

Что вам нужно, это 3 dfs, где у вас есть 3 перестановки идентификатора магазина для каждого объединенного элемента и местоположения.

Мой подход должен был бы объединить вне цикла, сделать темп ДФ что является копия, установите StoreID для этого ФР и CONCAT в результате слияния ДФ, а затем записать в файл CSV:

# our merged items and store locations 
merged_items = items.merge(store_loc, on='itemCat') 
for i in stores: 
    # take a copy 
    temp_df = merged_items.copy() 
    # set the store id 
    temp_df['storeID'] = i 
    # now just concat 
    item_merged = pd.concat([iterm_merged, temp_df], ignore_index=True) 

# rest of code is same 
+0

Спасибо, ред. На самом деле, я смотрю на значения n storeID (в 100-х годах). Цель состоит в том, чтобы скомпилировать и конкатенировать все itemID для пар StoreLocation для каждого 1 storeID. – Kenfucious

+0

. Сначала вам лучше было бы добавить список в список, а затем объединить их с помощью pandas, это будет очень неэффективным циклом таким образом и конкатенацией. – EdChum

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