【发布时间】:2018-01-23 17:48:21
【问题描述】:
我在读取文件时遇到了一些关于定义多个分隔符的问题。它最初在我之前的帖子reading-files-with-multiple-delimiter-in-column-headers-and-skipping-some-rows 中解决,感谢@piRsquared
当我详细查看我的真实数据时,我 意识到某些列具有 .cd 或 .dvd 扩展名,当我应用上面的解决方案时,它们也被分离为一个新列,上面的解决方案开始不起作用!
b.txt
skip1
A1| A2 |A3 |A4# A5# A6 A7| A8 , A9
1,2,3,4,5.cd,6,7,8.dvd,9
1,2,3,4,5.cd,6,7,8.dvd,9
1,2,3,4,5.cd,6,7,8.dvd,9
END123
Some other data starts from here
并使用上面的solution 读取这个 b.txt 文件
txt = open('b.txt').read().split('\nEND')[0]
pd.read_csv(
pd.io.common.StringIO(txt),
sep=r'\W+',
skiprows=1,index_col=False, engine='python')
A1 A2 A3 A4 A5 A6 A7 A8 A9
0 1 2 3 4 5 cd 6 7 8
1 1 2 3 4 5 cd 6 7 8
2 1 2 3 4 5 cd 6 7 8
A5 列应该有行
5.cd
5.cd
5.cd
A9 列也一样
8.dvd
8.dvd
8.dvd
我们应该有 A9 列,但似乎由于这种冲突而消失了。
编辑:
我将几乎相似的身份与我的真实数据放在一起
skip rows
A1| A2| A3|A4# A5# | A6 | A7 , A8, A9 | A10 |
1 | 2 | 3 |4 # 5 # | 6.cd|7.dvd, , | 10 |
1 | 2 | 3 |4 # 5 # | 6.cd| , , 9 | 10 |
1 | 2 | 3 |4 # 5 # | |7.dvd, , | 10 |
END123
Some other data starts from here
尝试过
txt = open('real_dat.txt').read().split('\nEND')[0]
_, h, txt = txt.split('\n', 2)
pat = r'[\|, ,#,\,]+'
names = re.split(pat, h.strip())
df=pd.read_csv(
pd.io.common.StringIO(txt),
names=names,skiprows=1,index_col=False,
engine='python')
并得到这个输出!
【问题讨论】:
标签: python pandas delimiter csv