簡體   English   中英

Pandas read_fwf:指定數據類型

[英]Pandas read_fwf: specify dtype

我正在分塊讀取一個巨大的固定寬度文本文件,並將數據導出為 csv。 因為pandas.read_fwf不允許指定 dtypes,我想知道還有什么其他方法可以強制列是字符串。 原因是 Pandas 將某些列推斷為浮動,即使它們不是,而且我不希望在列中使用.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不會嘗試猜測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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM