【问题标题】:pd.read_csv with index_col= argument truncates leading zeros带有 index_col= 参数的 pd.read_csv 截断前导零
【发布时间】:2019-04-07 00:35:33
【问题描述】:

对于如何避免使用 pd.read_csv 截断前导零的问题,SO 有几个答案,例如 one。

我的问题是如何避免使用 pd.read_csv 方法的 index_col= 参数截断前导零。在此示例中,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= 参数的情况下读取并在读取后设置索引并获得所需的结果。

【问题讨论】:

    标签: pandas


    【解决方案1】:

    您唯一的选择是在解析后设置索引。

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

    这已经是 pandas 中的 open issue 有一段时间了,但仍未修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      相关资源
      最近更新 更多