我正在导入一个数据集,其中的列只显示有效数字:
Volume
------
11.2
12
...
因为我们使用确切的值(11.2
或12
)进行查找,所以不要更改此内容非常重要。因此,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
?
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
)
答案 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