我正在使用pandas(python)csv_reader,但我不知道在“ sep”参数上使用正则表达式来返回所需的数据帧是否可行或有效。
我正在从单列csv中读取内容,我必须将其转换为11列csv。
我正在尝试实现以下目的的分隔符:
数据采用这种格式(多行):
111-XXX XX XXXX AAA 999-BBB CCCC 0,00 01/01/1950 111.111 22. DDDD 11.111,11 11.111,11
到目前为止,我只实现了将大空格和带有点的空格分隔为:sep = r“ [。] {2,}”
我需要数据变得像这样:
111-XXX XX XXXX | AAA | 999-BBB| CCCC | 0,00 | 01/01/1950 | 111.111 | 22 | DDDD | 11.111,11 | 11.111,11
尝试检测后跟空格的数字(将AAA从999-BBB拆分为“ [] [0-9]”)也会导致删除第一个数字(导致99-BBB),这是不希望的。
到目前为止,这是我的代码:
df = pd.read_csv("myarchive.csv",
sep=r"[ .]{2,}",
engine="python",
names = col,
usecols = col,
na_filter=False,
keep_default_na=False)
答案 0 :(得分:1)
通过delim_whitespace=True
参数。
从文档中:
delim_whitespace:bool,默认为False
指定是否将空格(例如''或'')用作分隔符。等效于设置sep ='\ s +'。如果将此选项设置为True,则分隔符参数不应传递任何内容。
然后手动修复第一个字段。
编辑:如果格式始终相同,也可以使用read_fwf
:
widths = [
15, # 111-XXX XX XXXX
14, # AAA
8, # 999-BBB
16, # CCCC
16, # 0,00
17, # 01/01/1950
16, # 111.111
7, # 22.
5, # DDDD
17, # 11.111,11
16, # 11.111,11
]
df = pd.read_fwf('test.csv', widths=widths, header=None)
print(df.values)