2016-06-22 3 views
1

В настоящее время у меня есть dataframe и csv-файл.Замена данных из dataframe данными из другого фрейма данных

В файле csv у меня есть около 30 столбцов, включая один столбец почтовых индексов (например, «10001», «08983», «85321»). CSV - 3400 строк х 30 столбцов.

В dataframe, у меня есть столбец почтовых индексов и столбец соответствия баллов:

zipcode score 
99780 2.250000 
99801 2.719083 
99824 2.721311 
99827 2.285714 
99835 2.534783 
99901 2.501558 
[27688 rows x 1 columns] 

Я хочу пойти в мой файл CSV, смотреть на каждый почтовый индекс, соответствовать ZIP код с и добавьте новый столбец, который отмечает оценку, которая хранится в фрейме данных. Я тоже был бы в порядке, просто скомпилировав ZIP-код в файле csv с оценкой в ​​dataframe, если это быстрее.

Причина, по которой .replace не собирается работать, заключается в том, что я не хочу вручную вводить все почтовые индексы 27688 и говорить, что их нужно заменить.

Любые идеи?

EDIT: Вот что строка в CSV файл в настоящее время выглядит следующим образом:

Name  Age  DOB  Gender  Hair Color  Eye Color  ZIP 
John Doe 22  6-10 Male  Brn   Brn   99780 

А вот то, что я хочу, чтобы это выглядело как:

Name  Age  DOB  Gender  Hair Color  Eye Color  ZIP  Score 
John Doe 22  6-10 Male  Brn   Brn   99780 2.250000 

Я также хорошо с столбец «Оценка», заменяющий столбец ZIP.

+0

пример слияния я отправил ниже должен сделать это очень легко. Импортируйте csv в отдельный фрейм данных, а затем объедините два фрейма данных на основе соответствующего столбца. – NLMDEJ

+0

Чтобы вернуть его в csv, вы должны использовать df3.to_csv ('file.csv') – NLMDEJ

ответ

0

Вы пробовали загружать csv в список и затем перебираете элементы в списке.

import csv 
sFile = "myfile.csv" 
with open(sFile, 'rb') as f: 
    reader = csv.reader(f) 
    yourList = list(reader) 

for item in yourList: 
    #search and replace based on each item 

Вы также можете попробовать слияние с пандами.

Update: Использование слияния

Вот пример использования слияния:

import pandas as pd 

df = pd.DataFrame([[12345,"Atlanta"],[54321,"Orlando"]], columns=['Zip','City']) 

df2 = pd.read_csv('Zip.csv') 

df3 = pd.merge(df,df2,how="left",) 

print (df3) 

Результат:

 Zip  City  State 
0 12345 Atlanda Georgia 
1 54321 Orlando Florida 
+0

Я думаю, что я запутался - для первого метода, использующего 'import csv', похоже, что это будет ресурсный свиньи. А также, я не знаю, как это сделать, чтобы искать по каждой строке в моем исходном фрейме. И для слияния - я смотрю документацию, и я не уверен, что это делает то, что я хочу, чтобы это делалось? В CSV-файле будет несколько записей, которые будут иметь один и тот же почтовый индекс, - если работа слияния, даже если это так? А также, поскольку в исходной базе данных, которые не совпадают с CSV-файлом, будут какие-то почтовые индексы, будет ли она создавать тысячи посторонних строк? – Beoulve

+0

Что вы пытаетесь достичь с окончательным результатом. Обновление, которое я опубликовал (используя «Слияние»), создает кадр данных, который содержит исходный набор данных вместе с информацией в файле csv. Затем вы можете либо экспортировать данные, либо сделать что-то еще с ним. – NLMDEJ

+0

Я добавлю пример того, как выглядят записи в CSV-файле, и что я хочу, чтобы они выглядели. Редактировать должно появиться через ~ 5 минут. – Beoulve

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