[英]Use Multiple Character Delimiter in Python Pandas read_csv
看来熊猫read_csv函数只允许单字符分隔符/分隔符。 有没有办法允许使用字符串,例如“*|*”或“%%”?
熊猫现在支持多字符分隔符
import panda as pd
pd.read_csv(csv_file, sep="\*\|\*")
解决方案是使用read_table而不是read_csv:
1*|*2*|*3*|*4*|*5
12*|*12*|*13*|*14*|*15
21*|*22*|*23*|*24*|*25
所以,我们可以用以下内容来阅读:
pd.read_table('file.csv', header=None, sep='\*\|\*')
正如Padraic Cunningham在上面的评论中写道,目前还不清楚你为什么要这样做。 CSV规范的Wiki条目说明了分隔符:
...由分隔符分隔(通常是单个保留字符,如逗号,分号或制表符;有时分隔符可能包含可选空格),
不出所料, csv
模块和pandas都不支持你所要求的。
但是,如果你真的想这样做,那么你几乎要使用Python的字符串操作。 以下示例显示如何将数据框转换为带有$$
分隔行的“csv”和%%
分隔列。
'$$'.join('%%'.join(str(r) for r in rec) for rec in df.to_records())
当然,在将其写入文件之前,您不必将其转换为这样的字符串。
不是pythonic方式,但绝对是编程方式,你可以使用这样的东西:
import re
def row_reader(row,fd):
arr=[]
in_arr = str.split(fd)
i = 0
while i < len(in_arr):
if re.match('^".*',in_arr[i]) and not re.match('.*"$',in_arr[i]):
flag = True
buf=''
while flag and i < len(in_arr):
buf += in_arr[i]
if re.match('.*"$',in_arr[i]):
flag = False
i+=1
buf += fd if flag else ''
arr.append(buf)
else:
arr.append(in_arr[i])
i+=1
return arr
with open(file_name,'r') as infile:
for row in infile:
for field in row_reader(row,'%%'):
print(field)
在 pandas 1.1.4 中,当我尝试使用多字符分隔符时,我收到消息:
ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.
因此,为了能够使用多个字符分隔符,现代解决方案似乎是在read_csv
参数中添加engine='python'
(在我的情况下,我将它与sep='[ ]?;
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.