Pandas csv-import: сохранить ведущие нули в столбце

Я импортирую данные исследования во фрейм данных Pandas, используя.read_csv

Моими предметными кодами являются 6 чисел, кодирующих, среди прочего, день рождения. Для некоторых моих предметов это приводит к коду с начальным нулем (например, "010816").

Когда я импортирую в Pandas, ведущий ноль удаляется, а столбец форматируется как.int64

Есть ли способ импортировать этот столбец без изменений, возможно, в виде строки?

Я попытался использовать пользовательский конвертер для столбца, но он не работает - кажется, что пользовательское преобразование происходит до того, как Pandas преобразует в int.

 firelynx26 мая 2016 г., 09:30
Возможный дубликатПанды read_csv dtype ведущие нули

Ответы на вопрос(4)

Я неНе думаю, что вы можете указать тип столбца так, как вы хотите (если нетОн был изменен сразу, и если 6-значное число не является датой, которую можно преобразовать в дату и время). Вы можете попробовать использоватьnp.genfromtxt() и создатьDataFrame оттуда.

РЕДАКТИРОВАТЬ: Взгляните на Уэса Маккинниблогможет быть что-то для вас. Похоже, что есть новый парсер изpandas 0.10 в ноябре.

 Chang She06 нояб. 2012 г., 18:14
вы должны быть в состоянии заставить его работать сейчас, если вы обновитесь до последней версии на github master (т.е. с помощью конвертера)
 MERose04 июл. 2016 г., 14:14
Уэс МаккинниСтраница блога с 404.
 root06 нояб. 2012 г., 15:36
 Chang She06 нояб. 2012 г., 18:13
функции в этом выпуске теперь выполняются в ветке c-parser и должны появиться в 0.10. Я только что постарался решить проблему № 2184 и скоро войду в 0.9.1. Но да, использование dtypes должно быть предпочтительным поведением, поэтому просто следите за 0.10 примерно за месяц.
 user180288307 нояб. 2012 г., 11:30
@ChangShe спасибо, с последней версией github мой конвертер действительно работает! С нетерпением жду 0,10 для более чистого решения, хотя ...
 Chang She06 нояб. 2012 г., 15:07
Я сделал вопрос GitHub:github.com/pydata/pandas/issues/2184

Как указано вэтот вопрос / ответ отЛев Ландау, может быть простое решение для использованияconverters вариант для определенного столбца вread_csv функция.

converters={'column_name': lambda x: str(x)}

Вы можете обратиться к большему количеству вариантовread_csv функция в pandas.io.parsers.read_csvдокументация.

Допустим, у меня есть CSV-файлprojects.csv как ниже:

project_name,project_id
Some Project,000245
Another Project,000478

Как, например, приведенный ниже код обрезает ведущие нули:

import csv
from pandas import read_csv

dataframe = read_csv('projects.csv')
print dataframe

Результат:

[email protected]:~$ python test_dataframe.py 
      project_name  project_id
0     Some Project         245
1  Another Project         478
[email protected]:~$

Пример кода решения:

import csv
from pandas import read_csv

dataframe = read_csv('projects.csv', converters={'project_id': lambda x: str(x)})
print dataframe

Требуемый результат:

[email protected]:~$ python test_dataframe.py 
      project_name project_id
0     Some Project     000245
1  Another Project     000478
[email protected]:~$
 venkat13 авг. 2018 г., 07:57
Как дать для нескольких столбцов ??
 kkakroo19 апр. 2018 г., 10:57
Безразлично»работать на панд -> А также 0.22.0
 Daniil Mashkin07 февр. 2018 г., 11:03
Безразлично»т работа для панд == 0.20.2
 DeshDeep Singh21 июн. 2018 г., 10:09
работал как по волшебству. Спасибо

Если у вас много столбцов, и вы неНе знаете, какие из них содержат лидирующие нули, которые могут быть пропущены, или вам может потребоваться автоматизировать ваш код. Вы можете сделать следующее:

df = pd.read_csv("your_file.csv", nrows=1) # Just take the first row to extract the columns' names
col_str_dic = {column:str for column in list(df)}
df = pd.read_csv("your_file.csv", dtype=col_str_dic) # Now you can read the compete file

Вы также можете сделать:

df = pd.read_csv("your_file.csv", dtype=str)

Сделав это, вы получите все свои столбцы в виде строк, и вы выиграетене теряйте начальные нули.

Вот более короткое, надежное и полностью работающее решение:

просто определите отображение (словарь) между именами переменных и желаемым типом данных:

dtype_dic= {'subject_id': str, 
            'subject_number' : 'float'}

используйте это отображение с:pd.read_csv()

df = pd.read_csv(yourdata, dtype = dtype_dic)

и вуаля!

 ℕʘʘḆḽḘ17 апр. 2018 г., 22:28
Я считаю, что это также лучшее решение :)
 SummerEla25 июл. 2018 г., 02:26
Да, я был в пандах, а не в чистом питоне .. следовательно, объект вместо строки.
 ℕʘʘḆḽḘ09 мая 2018 г., 20:47
что вы имеете в виду объект? Вы должны использовать или str или числовой
 Daniil Mashkin07 февр. 2018 г., 11:03
Безразлично»т работа для панд == 0.20.2
 SummerEla09 мая 2018 г., 20:45
 Я попытался привести оба типа данных к строкам и объектам. Я думал, что это будет просто, но этоПросто не работает.
 ℕʘʘḆḽḘ09 мая 2018 г., 04:52
@SummerEla что такоеdtype вашей колонки? ты используешьread_csv как указано? @ ℕʘʘḆḽḘ
 racl10120 сент. 2017 г., 21:31
Просто и по существу. Я люблю это! Спасибо, сэр!
 ℕʘʘḆḽḘ04 нояб. 2016 г., 19:23
Вы также можете включить много других типов данных,float и другие. Я считаю, что это самое пандаское решение
 SummerEla09 мая 2018 г., 01:15
У меня это не сработало (python3.6, pandas 0.22.0); Я все еще потерял свои ведущие нули.
 Nikhil VJ06 апр. 2018 г., 04:46
query: в dtype_dic json, почему str без кавычек, а с плавающей точкой в кавычках?
 Nikhil VJ06 апр. 2018 г., 05:00
Я должен был пройти через различные CSV с разными столбцами. Эта функция взяла все отображения столбцов и неОшибка, когда столбец не былтам в таблице. Таким образом, я смог определить все столбцы (для чтения в виде строки) во всех разных таблицах всего за однуdtype_dic и использовать его для всех CSV 's. Спасибо!

Ваш ответ на вопрос