pd.read_csv с index_col = аргумент усекает ведущие нули - PullRequest
0 голосов
/ 02 ноября 2018

У SO есть несколько ответов на вопрос, как избежать усечения ведущих нулей с помощью pd.read_csv, например, one .

Мой вопрос заключается в том, как избежать усечения ведущих нулей с помощью аргумента index_col = для метода pd.read_csv. В этом примере столбец ID имеет начальные нули.

>>> import pandas as pd
>>> miss = {'Amount' : [' ', 'NA']}
>>> url = "https://raw.githubusercontent.com/RandyBetancourt/PythonForSASUsers/master/data/messy_input.csv"

>>> d1 = pd.read_csv(url, skiprows=2, na_values=miss, dtype={'ID' : object})
>>> print(d1)
 ID       Date   Amount  Quantity   Status Unnamed: 5
0  0042  16-Oct-17  $23.99      123.0   Closed     Jansen
1  7731  15-Jan-17  $49.99        NaN  Pending        Rho
2  8843   9-Mar-17      129      45.0      NaN      Gupta
3  3013  12-Feb-17      NaN      15.0  Pending   Harrison
4  4431   1-Jul-17  $99.99        1.0   Closed       Yang
>>> print(d1.dtypes)
ID             object
Date           object
Amount         object
Quantity      float64
Status         object
Unnamed: 5     object
dtype: object

При последующем чтении с аргументом index_col = индекс удаляет начальные нули.

>>> miss = {'Amount' : [' ', 'NA']}
>>> url = "https://raw.githubusercontent.com/RandyBetancourt/PythonForSASUsers/master/data/messy_input.csv"
>>> d1 = pd.read_csv(url, skiprows=2, na_values=miss, converters={'ID' : 
str}, index_col='ID')
>>> print(d1)
       Date   Amount  Quantity   Status Unnamed: 5
ID
42    16-Oct-17  $23.99      123.0   Closed     Jansen
7731  15-Jan-17  $49.99        NaN  Pending        Rho
8843   9-Mar-17      129      45.0      NaN      Gupta
3013  12-Feb-17      NaN      15.0  Pending   Harrison
4431   1-Jul-17  $99.99        1.0   Closed       Yang
>>> print(d1.dtypes)
Date           object
Amount         object
Quantity      float64
Status         object
Unnamed: 5     object
dtype: object
>>> d1.index
Int64Index([42, 7731, 8843, 3013, 4431], dtype='int64', name='ID')

Как сохранить ведущие нули, используя только метод pd.read_csv? Я знаю, что могу читать без аргумента index_col = и установить индекс после чтения и получить желаемые результаты.

1 Ответ

0 голосов
/ 02 ноября 2018

Ваш единственный вариант - установить индекс после разбора.

d1 = pd.read_csv(url, skiprows=2, na_values=miss, converters={'ID' : 
str}).set_index('ID')

Это была открытая проблема в пандах некоторое время, но до сих пор не исправлена.

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