我有一个包含以下内容的CSV文件 Pandas_float_test.csv
C0
20180904115745000007000
当我使用read_csv
读取文件时,如下所示,
with open(os.path.join('data','Pandas_float_test.csv')) as csv_file:
df = pd.read_csv(csv_file,header='infer', parse_dates=True)
print(df)
print(df.dtypes)
print(pd.api.types.is_numeric_dtype(df['C0'])) # returns False
print(pd.api.types.is_integer_dtype(df['C0'])) # returns False
print(pd.api.types.is_string_dtype(df['C0'])) # returns True
print(pd.api.types.infer_dtype(df['C0'])) # returns string
我希望熊猫将dtype推断为float64
,但是它将dtype推断为字符串。这是故意的吗?
另外,当我尝试不使用read_csv
来重新创建相同内容时,
d = {'C0': [20180904115745000007000]}
df = pd.DataFrame(data=d)
print(df)
print(df.dtypes)
print(pd.api.types.is_numeric_dtype(df['C0'])) # returns False
print(pd.api.types.is_integer_dtype(df['C0'])) # returns False
print(pd.api.types.is_string_dtype(df['C0'])) # returns True
print(pd.api.types.infer_dtype(df['C0'])) # returns integer
is_integer_dtype
返回False
,但是infer_dtype
返回整数。
我正在使用熊猫0.24.0。
答案 0 :(得分:0)
熊猫通常将其推断为“字符串”。
这是因为最大的int数据类型是int64,它包含
中的数字int64整数(-9223372036854775808至9223372036854775807)
>>> 9223372036854775807 > 20180904115745000007000
False
从numpy文档中查看更多内容:: https://docs.scipy.org/doc/numpy-1.15.0/user/basics.types.html
因此,为了转换对象/或显式指定列数据类型,可以使用pandas.read_csv的'dtype'属性,该属性以字典作为输入,由列名作为键,其数据类型作为值。
dtype_dict = {
'C0': 'float'
}
>>> df = pd.read_csv("sc.csv", dtype=dtype_dict)
>>> df.head()
C0
0 2.018090e+22
1 2.018090e+22
2 2.018090e+22
答案 1 :(得分:0)
Pandas方法pandas.read_csv()
和pandas.DataFrame()
都具有 dtype 参数。
dtype:类型名称或列的字典->类型,可选
数据或列的数据类型。例如。 {‘a’:np.float64,‘b’:np.int32,‘c’:‘Int64’}
因此,您可以在创建数据框时直接设置类型。如果不这样做,大熊猫几乎总是默认为字符串。
d = {'C0': [20180904115745000007000]}
df = pd.DataFrame(d, dtype="float")
df.dtypes
返回C0: float64