Python 在读取时自动转换字段类型

Python 在读取时自动转换字段类型,python,pandas,Python,Pandas,我正在导入一个数据集,其中的列只显示有效数字: Volume ------ 11.2 12 ... 重要的是,在使用精确值(无论是11.2还是12)进行查找时,我不会更改此值。因此,将12更改为12.0会中断查找 我已经在read\u csv上尝试了dtype: df = pd.read_csv(local_filename, engine='python', dtype={'volume': str, 'Volume': str} 输出: print(df['Volume'])

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

Volume
------
11.2
12
...
重要的是,在使用精确值(无论是
11.2
还是
12
)进行查找时,我不会更改此值。因此,将
12
更改为
12.0
会中断查找

我已经在
read\u csv
上尝试了
dtype

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

数据类型:列的类型名称或目录->类型,默认为无

数据或列的数据类型。例如{'a':np.float64,'b':np.int32} 使用str或object保留而不是解释数据类型。中频转换器 如果指定了,则将应用它们而不是数据类型转换

那么,为什么数据类型仍在更改

注:

  • 我还尝试在导入后使用
    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
)

您可以在查找之前转换为相应的数字类型。首先将列读取为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

尝试使用
object
而不是
str