Pandas在read_csv上自动转换字段类型

时间:2018-01-03 16:57:10

标签: python pandas

我正在导入一个数据集,其中的列只显示有效数字:

Volume
------
11.2
12
...

因为我们使用确切的值(11.212)进行查找,所以不要更改此内容非常重要。因此,Pandas将12更改为12.0会中断查找。

我在dtype上尝试了read_csv

df = pd.read_csv(local_filename, engine='python', dtype={'volume': str, 'Volume': str}

输出:

print(df['Volume']) 

      Volume
      ------
      11.2
      12.0
      ...

print(df['Volume'].dtypes) 

      Name: Volume, Length: 386408, dtype: object

它已转换为对象但仍在.0添加12

Pandas docs

  

dtype:列名称或列表 - >类型,默认无

     

数据或列的数据类型。例如。 {'a':np.float64,'b':np.int32}   使用str或object来保留和不解释dtype。如果转换器   如果指定,它们将应用于dtype转换的INSTEAD。

那么为什么数据类型仍在改变?

注意:

  • 我还尝试在导入后使用df['Volume'] = df['Volume'].round()删除小数点后的无效数字,但12.0仍然出现。
  • 我无法转换为int,因为我需要有效数字(如11.2

现在就这样做,直到我得到答案:

df['Volume'] = df['Volume'].apply(lambda x:
    x.split('.')[0] if x.split('.')[1] == '0' else x
)

1 个答案:

答案 0 :(得分:-1)

您可以在查找前转换为相应的数字类型。首先将列读为numpy.object类型。

import numpy as np
df = pd.read_csv("filepath",dtype={'col1':np.object})

def convert(val):
    return int(val) if val.isdecimal() else float(val)
lookup_value = convert(df['col1'][0])#returns either int or float