gpt4 book ai didi

python - Pandas read_fwf : specify dtype

转载 作者:太空宇宙 更新时间:2023-11-04 05:32:19 27 4
gpt4 key购买 nike

我正在读取一个巨大的固定宽度文本文件,并将数据导出为.csv.因为 pandas.read_fwf 不允许指定数据类型,所以我想知道还有什么其他方法可以强制列为字符串。这原因是 pandas 将某些列推断为 float ,即使它们不是并且我不想在列中使用 .0

使用 data[column] = data[column].astype(str) 没有帮助,因为它不会得到摆脱小数点。 将 float64 dtype 的列转换为 int 不起作用要么 因为 NA 无法转换。有什么想法吗?

这是我的代码片段:

dat = pd.read_fwf(file_to_read,colspecs=cols,header=None,chunksize=100000,names=header)
#First chunk
data.info()
Int64Index: 100000 entries, 0 to 99999
Columns: 562 entries,
dtypes: float64(405), int64(4), object(153)
memory usage: 429.5+ MB

for column in data.columns:
if data[column].dtype == 'float64':
data[column] = data[column].astype(int)
else:
pass

我可以做 str().replace('.0',''),但我想找到比遍历需要大量时间的列。

最佳答案

converter 参数可用于将数据保存为字符串,因为如果指定了转换器,pd.read_fwf 不会尝试猜测数据类型:

import pandas as pd
try:
# for Python2
from cStringIO import StringIO
except ImportError:
# for Python3
from io import StringIO

content = '''\
1.0 2 A
3.0 4 B
5 X C
M Y D
'''
header = ['foo', 'bar', 'baz']

for df in pd.read_fwf(StringIO(content), header=None, chunksize=2, names=header,
converters={h:str for h in header}):
print(df)
df.info()

产量

   foo bar baz
0 1.0 2 A
1 3.0 4 B

foo bar baz
0 5 X C
1 M Y D

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
foo 2 non-null object
bar 2 non-null object
baz 2 non-null object
dtypes: object(3)
memory usage: 120.0+ bytes

关于python - Pandas read_fwf : specify dtype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729392/

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