Панды читают fwf: укажите dtype
Я читаю в огромном текстовом файле фиксированной ширины кусками и экспортирую данные как
csv. Потому что панды.read_fwf не позволяет указывать типы dtypes, я
интересно, как еще можно заставить столбцы быть строками. То
причина в том, что панды выводят некоторые столбцы как плавающие, даже если они не являются и
Я не хочу .0 внутри столбца.
Использование data[column] = data[column].astype(str) не поможет, так как не получит
избавиться от дробей. преобразование столбцов float64 dtype в int не работает
либо , так как NAs не может быть преобразован. Есть идеи?
Вот фрагмент моего кода:
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',''), но я хочу найти более простой способ, чем
итерация по столбцу, которая занимает много времени.
1 ответ:
Параметр
converterможно использовать для сохранения данных в виде строк, так какpd.read_fwfне пытается угадать тип dtype, если указан преобразователь: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
Comments