[英]Read fixed-width text file with varchar in pandas
我想讀取具有固定寬度格式的文本文件。 不幸的是,它還包含一個varchar字段,該字段告訴我開始時的長度(所以寬度畢竟不是那么固定)。 該文件看起來像這樣
Boris 1520190730 0014likes icecreamblue
Lena 1320190815 0009is blondered
具有如下所示的架構:
{
'name':10,
'age':2,
'last_visit':8,
'other_field':5,
'comment':???,
'fav_color':8
}
在遇到varchar字段之前,我的方法是使用pandas的read_fwf
或通過df[col].str[schema[col][0]:schema[col][1]
。 當然,這對於可變長度字段將失敗。 至少該字段告訴我其開頭的長度(0014和0009)。
有沒有一種優雅的熊貓方式可以讀取此類文件? 還是我必須逐行循環並動態處理字段?
您可以使用帶有正則表達式定界符和轉換器的read_table來讀取數據,然后進行一些后期處理( 拆分一列 ),例如:
import pandas
schema = {
'name': 10,
'age': 2,
'last_visit': 8,
'other_field': 5,
'comment': None,
'fav_color': 8
}
# A converter for the variable length and following columns
def converter(x):
"""Return the comment and the fav_color values separated by ','."""
length_len = 4
comment_len = int(x[:length_len])
return x[length_len:comment_len + length_len:] + ',' + x[comment_len + length_len:]
# A regex as delimiter for the fixed length columns
delimiter = f"(.{{{schema['name']}}})(.{{{schema['age']}}})(.{{{schema['last_visit']}}}).{{{schema['other_field']}}}(.*)"
# Use the delimiter and converter (column 4 holds comment and fav_color) for reading the table
data = pandas.read_table('input.txt', header=None, sep=delimiter, converters={4: converter})
# Clean the table
data.dropna(inplace=True, axis=1)
# Split the comment and the fav_color columns
data[5], data[6] = data[4].str.split(',', 1).str
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.