我有一个txt文档,结构如下:
1:0.84722,0.52855;0.65268,0.24792;0.66525,0.46562
2:0.84722,0.52855;0.65231,0.24513;0.66482,0.46548
3:0.84722,0.52855;0.65197,0.24387;0.66467,0.46537
第一个带冒号的数字是索引,我不知道在打开文件时如何指示它。的确,我想把它抹去。然后用逗号和分号分隔数据,我希望将每个数字放在不同的列中,而不管分隔符是逗号还是分号。我怎么能做到呢?
使用以下命令加载csv文件:
import pandas as pd
df = pd.read_csv("data.csv", # the file path, change it to your filename
sep="[,;:]", # the separator use a regular expression
engine="python", # need this to use regular expression as sep
usecols=range(1, 7), # use columns from [1, 7)
header=None # no header
)
print(df)
1 2 3 4 5 6
0 0.84722 0.52855 0.65268 0.24792 0.66525 0.46562
1 0.84722 0.52855 0.65231 0.24513 0.66482 0.46548
2 0.84722 0.52855 0.65197 0.24387 0.66467 0.46537
注意
加载文件后,我建议将其保存(使用to_csv)为适当的csv文件。
当您使用pandas时。read_csv已经完成了,只要看一下它的文档,找到参数sep
:
使用的分隔符。如果sep为None,则C引擎无法自动检测分隔符,但Python解析引擎可以,这意味着Python的内置嗅探工具csv.Sniffer将使用后者并自动检测分隔符。此外,大于1个字符且不同于's+'的分隔符将被解释为正则表达式并且还将强制使用Python解析引擎。注意,正则表达式分隔符容易忽略加引号的数据。正则表达式示例:'rt'.
因此,在您的情况下,只需调用pandas.read_csv(..., sep='[,;:]')
就可以了。
首先将其作为常规文本加载(没有.csv解析器)。删除所有不需要的文本,列…
要去掉第一个数字,可以用:
分线,只保留第二部分。
其余部分用replace(",", ";")
代替
现在你有一个漂亮的。csv,你可以立即读取和解析。
对于使用多个分隔符,您可以传递像:|,|;
这样的regex
模式,它基本上表示这些中的任何一个。
对于不使用第一列-您可以使用usecols
指定列engine="python"
规范是可选的,因为长度超过1个字符的分隔符将强制使用python引擎。
x = '''1:0.84722,0.52855;0.65268,0.24792;0.66525,0.46562
2:0.84722,0.52855;0.65231,0.24513;0.66482,0.46548
3:0.84722,0.52855;0.65197,0.24387;0.66467,0.46537'''
xf = io.StringIO(x)
df = pd.read_csv(xf, sep=":|,|;", engine='python', header=None, usecols=list(range(1, 7)))
print(df)
# 1 2 3 4 5 6
#0 0.84722 0.52855 0.65268 0.24792 0.66525 0.46562
#1 0.84722 0.52855 0.65231 0.24513 0.66482 0.46548
#2 0.84722 0.52855 0.65197 0.24387 0.66467 0.46537