Как указать dtype при использовании pandas.read_csv для загрузки данных из CSV-файлов? - PullRequest
7 голосов
/ 14 марта 2012

У меня есть несколько текстовых файлов в следующем формате:

000423|东阿阿胶|     300|1|0.15000|            |
000425|徐工机械|     600|1|0.15000|            |
000503|海虹控股|     400|1|0.15000|            |
000522|白云山A|        |2|       |    1982.080|
000527|美的电器|     900|1|0.15000|            |
000528|柳    工|     300|1|0.15000|            |  

, когда я использую read_csv для загрузки их в DataFrame, он не генерирует правильный dtype для некоторых столбцов.Например, первый столбец анализируется как int, а не unicode str, третий столбец анализируется как unicode str, а не int из-за отсутствия данных ... Есть ли способ предустановки dtype для DataFrame, какnumpy.genfromtxt делает?

Обновления: я использовал read_csv вот так, что вызвало проблему:

data = pandas.read_csv(StringIO(etf_info), sep='|', skiprows=14, index_col=0, 
                       skip_footer=1, names=['ticker', 'name', 'vol', 'sign', 
                       'ratio', 'cash', 'price'], encoding='gbk')

Чтобы решить проблемы с dtype и кодированием, мне нужно использовать unicode() и numpy.genfromtxt сначала:

etf_info = unicode(urllib2.urlopen(etf_url).read(), 'gbk')
nd_data = np.genfromtxt(StringIO(etf_info), delimiter='|', 
                        skiprows=14, skip_footer=1, dtype=ETF_DTYPE)
data = pandas.DataFrame(nd_data, index=nd_data['ticker'],
                        columns=['name', 'vol', 'sign', 
                                 'ratio', 'cash', 'price'])

Было бы неплохо, если бы read_csv мог добавить dtype и usecols настройки.Извините за мою жадность.^ _ ^

Ответы [ 2 ]

4 голосов
/ 15 марта 2012

Проще говоря: нет, пока нет.В этой конкретной области требуется больше работы (читай: больше активных разработчиков).Если бы вы могли опубликовать, как вы используете read_csv, это может помочь.Я подозреваю, что пробел между барами может быть проблемой

РЕДАКТИРОВАТЬ: теперь это устарело.Это поведение изначально распространяется на read_csv

1 голос
/ 28 января 2017

Теперь вы можете использовать dtype в read_csv .

PS: Слава Уэсу МакКинни за ответы, довольно неловко противоречить "прошлому Уэсу".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...