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