2013-04-15 3 views
0

У меня есть список городов со связанными значениями lon, lat, которые я бы хотел включить в DataFrame, но вместо чтения из файла CSV я хочу иметь пользователь модифицирует или добавляет в эти города значения lat, lon в ячейку в ноутбуке IPython. Сейчас у меня есть это решение, которое работает, но это, кажется, немного уродливый:CSV-подобные данные в сценарии для Pandas DataFrame

import pandas as pd 
sta = array([ 
     ('Boston',   42.368186, -71.047984), 
     ('Provincetown', 42.042745, -70.171180), 
     ('Sandwich',  41.767990, -70.466219), 
     ('Gloucester',  42.610253, -70.660570) 
     ], 
     dtype=[('City','|S20'), ('Lat','<f4'), ('Lon', '<f4')]) 

# Create a Pandas DataFrame 
obs = pd.DataFrame.from_records(sta,index='City') 
print(obs) 
        Lat  Lon 
City        
Boston  42.368187 -71.047981 
Provincetown 42.042744 -70.171181 
Sandwich  41.767990 -70.466217 
Gloucester 42.610252 -70.660568 

Есть ли более четкий, безопасный способ создания DataFrame?

Я думаю, что люди забудут скобки, добавить закрытие «» на последней строке, и т.д.

Спасибо, Богатые

+0

«добавить закрытие», «на последней строке»: если вы имеете в виду линию «Глостер», тогда все в порядке. На самом деле, иногда это даже рекомендуется! – DSM

+0

Круто, я этого не знал. Спасибо за этот отзыв! –

ответ

4

Вы можете просто создать большую строку многострочный, что они редактируют, а затем использовать read_csv прочитать его из объекта StringIO:

x = """ 
City, Lat, Long 
Boston, 42.4, -71.05 
Provincetown, 42.04, -70.12 
""" 

>>> pandas.read_csv(StringIO.StringIO(x.strip()), sep=",\s*") 
      City Lat Long 
0  Boston 42.40 -71.05 
1 Provincetown 42.04 -70.12 

конечно, люди могут до сих пор делают ошибки с этим (например, вставляя запятые), но формат проще.

+0

Именно то, что я искал. Благодаря! –