gpt4 book ai didi

python - pandas.read_fwf 忽略提供的数据类型

转载 作者:行者123 更新时间:2023-12-01 08:51:18 24 4
gpt4 key购买 nike

我正在从文本文件导入数据框我想指定列的数据类型,但 pandas 似乎忽略了 dtype 输入。

一个工作示例:

from io import StringIO
import pandas as pd

string = 'USAF WBAN STATION NAME CTRY ST CALL LAT LON ELEV(M) BEGIN END\n007026 99999 WXPOD 7026 AF +00.000 +000.000 +7026.0 20120713 20170822\n007070 99999 WXPOD 7070 AF +00.000 +000.000 +7070.0 20140923 20150926'

f = StringIO(string)

df = pd.read_fwf(f,
colspecs = [(0,6),
(7,12),
(13,41),
(43,45),
(48,50),
(51,55),
(57,64),
(65,73),
(74,81),
(82,90),
(91,101)],
dtypes = {'USAF' : str,
'WBAN' : str,
'STATION NAME' : str,
'CT' : str,
'ST' : str,
'CALL' : str,
'LAT' : float,
'LON' : float,
'ELEV(M)' : float,
'BEGIN' : int,
'END' : int,},
)
df.dtype

返回

USAF              int64
WBAN int64
STATION NAME object
CT object
ST float64
CALL float64
LAT float64
LON float64
ELEV(M) float64
BEGIN int64
END int64
dtype: object

为什么会发生这种情况?如何强制第一列为字符串?

最佳答案

使用 read_fwf 进行数据类型转换时存在问题。这是 Pandas 猜测类型并应用。此处明确使用转换器。您必须在 DataFrame 创建期间执行此操作,因为如果之后进行转换,您将丢失前导 0

string = 'USAF   WBAN  STATION NAME                  CTRY ST CALL  LAT     LON      ELEV(M) BEGIN    END\n007026 99999 WXPOD 7026                    AF            +00.000 +000.000 +7026.0 20120713 20170822\n007070 99999 WXPOD 7070                    AF            +00.000 +000.000 +7070.0 20140923 20150926'

f = StringIO(string)
df = pd.read_fwf(f,
colspecs = [(0,6),
(7,12),
(13,41),
(43,45),
(48,50),
(51,55),
(57,64),
(65,73),
(74,81),
(82,90),
(91,101)],
converters = {'USAF':lambda x : str(x),
'WBAN':lambda x : str(x),
'STATION NAME':lambda x : str(x),
'CT':lambda x : str(x),
'ST':lambda x : str(x),
'CALL':lambda x : str(x)}
)
>>> df.dtypes
USAF object
WBAN object
STATION NAME object
CT object
ST object
CALL object
LAT float64
LON float64
ELEV(M) float64
BEGIN int64
END int64
dtype: object

关于python - pandas.read_fwf 忽略提供的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53105792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com