python - Pandas:错误可能是由于使用多字符分隔符时忽略引号引起的
问题描述
我想像这样使用 pandas 读取 file.txt:
option19971675181 ACHILLE BLA BLA BLA1 blabla 88 498
option19971675182 ACHILLE BLA BLA BLA 1 blabla 176 498
option19971675183 ACHILLE BLA BLA BLA1 blabla 191 498
option19971675184 ACHILLE BLA BLA BLA1 blabla 521 498
option19971675185 ACHILLE BLA BLA BLA1 blabla 919 498
option19971675186 ACHILLE BLA BLA BLA134234531 blabla 10 498
option19971675187 ACHILLE BLA BLA BLA134234531 7 65 blabla 0 0
option19971675188 ACHILLE BLA BLA BLA1342 90345 31 blabla 0 0
option19971675189 ACHILLE BLA BLA BLA 134 23N 094 87OP531 blabla 0 0
option19971675190 ACHILLE BLA BLA BLA 134 23N 094 87 OP53 blabla 0 0
列值由多个空格分隔,因此我编写了以下代码:
df = pd.read_csv("test.txt", delimiter ="\s\s+", header = None)
这里的问题是我在 exp 的文本(ACHILLE BLA BLA BLA 1 )中有一些额外的空格:
option19971675190 ACHILLE BLA BLA BLA 134 23N 094 87 OP53 blabla 0 0
option19971675182 ACHILLE BLA BLA BLA 1 blabla 176 498
这个额外的空格导致和错误:pandas.errors.ParserError: Expected 5 fields in line, saw 6. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.
有什么解决办法吗?
解决方案
我们可以通过将分隔符设置为“3 个或更多空格”来解决此问题:
df = pd.read_csv(text, sep="\s{3,}", header=None)
print(df)
0 1 2 3 4
0 option19971675181 ACHILLE BLA BLA BLA1 blabla 88 498
1 option19971675182 ACHILLE BLA BLA BLA 1 blabla 176 498
2 option19971675183 ACHILLE BLA BLA BLA1 blabla 191 498
3 option19971675184 ACHILLE BLA BLA BLA1 blabla 521 498
4 option19971675185 ACHILLE BLA BLA BLA1 blabla 919 498
5 option19971675186 ACHILLE BLA BLA BLA134234531 blabla 10 498
6 option19971675187 ACHILLE BLA BLA BLA134234531 7 65 blabla 0 0
7 option19971675188 ACHILLE BLA BLA BLA1342 90345 31 blabla 0 0
8 option19971675189 ACHILLE BLA BLA BLA 134 23N 094 87OP531 blabla 0 0
9 option19971675190 ACHILLE BLA BLA BLA 134 23N 094 87 OP53 blabla 0 0
注意:尽管此解决方案有效,但您的文件格式看起来更像是固定宽度格式,因此您应该使用pd.read_fwf
df = pd.read_fwf(text, colspecs="infer", header=None)
print(df)
0 1 2 3
0 option19971675181 ACHILLE BLA BLA BLA1 blabla 88 498
1 option19971675182 ACHILLE BLA BLA BLA 1 blabla 176 498
2 option19971675183 ACHILLE BLA BLA BLA1 blabla 191 498
3 option19971675184 ACHILLE BLA BLA BLA1 blabla 521 498
4 option19971675185 ACHILLE BLA BLA BLA1 blabla 919 498
5 option19971675186 ACHILLE BLA BLA BLA134234531 blabla 10 498
6 option19971675187 ACHILLE BLA BLA BLA134234531 7 65 blabla 0 0
7 option19971675188 ACHILLE BLA BLA BLA1342 90345 31 blabla 0 0
8 option19971675189 ACHILLE BLA BLA BLA 134 23N 094 87OP531 blabla 0 0
9 option19971675190 ACHILLE BLA BLA BLA 134 23N 094 87 OP53 blabla 0 0
推荐阅读
- java - Apache Flink:如何使用 Java Map 流(或包含 DTO 的 Map)?
- html - 我需要帮助对齐页面中心的图像链接
- java - 如何在 Spring Boot 中使用 Java 从 JSON 响应中提取特定部分?
- r - 条件面板模块化后不起作用
- javascript - 我如何才能实现该 react-bootstrap 组件的 100% 可重用性?
- java - 关于超类和子类的构造函数的问题
- flutter - 在 listview.builder 上方 Flutter Scroll Carousel
- android - 主 Activity 之外的 Android 的 UI 管理器
- c# - .Net Core 3.0 Nginx 不提供静态文件
- kubernetes - Kubeadm 无法创建 SubnetManager:检索 kube-system 的 pod 规范时出错