- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要编写一个函数来解析一个非常大的 .csv 文件。不幸的是,制作 csv 文件的人没有使用很好的分隔符,因为其中一个文本列偶尔会使用分隔符(我对此无法控制)。 csv 文件在文本周围没有引号,即有问题的行看起来像这样:
colAVal, (colBVal_1, colBVal_2), colCVal
我应该注意,对于所有有问题的行,B 列的值是标准的,因为它始终是 (colBVal_1, colBVal_2)
因为大多数行没有这个问题,pandas.read_csv 需要 3 列,当它遇到这些有问题的行之一时崩溃。
因为逗号在括号中,我想不出解决这个问题的方法,使用 read_csv 中的 quotechar 参数。我想避免编写自己的 read_csv 函数来逐行处理,并尽可能手动解决此问题。理想情况下,我正在寻找一种方法来告诉 read_csv 当它遇到 (colBVal_1, colBVal_2) 时,它应该自动将其分配给 colB 或者让 read_csv 将数据分成 2 个数据帧:一个有 3 列,一个有 4 列,我可以手动合并在一起。
最佳答案
如评论中所述,您可以使用“损坏的”csv 行制定语法,并将生成的输出提供给 pandas
DataFrame。
以下肯定可以优化,但可能会给您一个想法:
from parsimonious.grammar import Grammar
from parsimonious.nodes import NodeVisitor
import pandas as pd
broken_garbage = """
1, (2, 3), 4
colAVal, (colBVal_1, colBVal_2), colCVal,
this, one, right
234,(123,456),789
"""
grammar = Grammar(
r"""
content = garbage? line+
line = entry+ newline?
entry = value sep?
value = word / (lpar word sep word rpar)
lpar = "("
rpar = ")"
word = ~"\w+"
sep = ws? "," ws?
ws = ~"[\t ]+"
newline = ~"[\r\n]+"
garbage = (ws / newline)+
"""
)
class BrokenVisitor(NodeVisitor):
def generic_visit(self, node, visited_children):
return visited_children or node
def visit_value(self, node, visited_children):
child = visited_children[0]
if isinstance(child, list):
_, value1, _, value2, _ = child
return (value1.text, value2.text)
else:
return child.text
def visit_entry(self, node, visited_children):
values, _ = visited_children
return values
def visit_line(self, node, visited_children):
content = visited_children[0]
return [item for item in content]
def visit_content(self, node, visited_children):
return visited_children[1]
tree = grammar.parse(broken_garbage)
broken = BrokenVisitor()
values = broken.visit(tree)
df = pd.DataFrame(values, columns=["one", "two", "three"])
print(df)
one two three
0 1 (2, 3) 4
1 colAVal (colBVal_1, colBVal_2) colCVal
2 this one right
3 234 (123, 456) 789
BrokenVisitor
类访问每个语法 block 并将行作为列表返回。然后将此结果输入
pandas.DataFrame
构造函数。
\K
的较新的
regex
module 并将括号中的所有逗号替换为另一个字符:
\([^,()]+\K,
在 Python
中,这可能是:
import regex as re
rx = re.sub(r'\([^,()]+\K,')
new_string = rx.sub('@', old_string)
之后,您可以将新字符串直接输入到 pandas.read_csv()
中。
参见 a demo on regex101.com。
关于python - 包含在括号中偶尔带有逗号的列的 CSV 文件会崩溃 pandas.read_csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55580933/
我有 4 个 TextView。它们一开始都是不可见的,我将它们动画到屏幕上(从底部滑入)。我启动一个线程来为每个动画制作动画,每个动画开始时间间隔 200 毫秒。问题是:开始 Activity 后第
我有一个奇怪的问题,我似乎无法解决。 :(我有一个基于 Web 的应用程序,可以发送电子邮件。它通过连接在本地网络上设置的基于 Windows 的 SMTP 服务器来实现。此 SMTP 服务器不需要我
从昨天开始,我一直遇到一些设备收不到推送通知的问题。证书/设备 token 似乎是正确的,因为直到昨天,该设备还可以成功接收推送通知。 在服务器端,没有错误或连接拒绝,而且推送通知似乎每次都发送成功。
我有一个将 Angular 错误记录到数据库的应用程序,并且我偶尔会看到此错误的日志 Error: [$compile:tpload] http://errors.angularjs.org/1.5.
我收到一个 ImportError from azure.storage.blob import BlobServiceClient 但是我意识到当我安装依赖项时会发生错误 pip install a
我已经完成了使用AVAudioPlayer实现的简单音频播放GUI。 播放声音时,我使用UISlider提供播放反馈... 这是奇怪的地方。 我有一个非常偶尔发生的问题-而且大多数情况都不会发生,因此
在我的 XNA 游戏中,我的计算机(2.5 Ghz 双核 Intel Centrino 2)在 Debug模式下有一个大约需要 10 毫秒的操作。它只会每隔几分钟运行一次,它基本上只是整数数学/按位运
我相信我的应用程序编码正确(至少大部分是这样),因为它在大约 98% 的时间里都能正常工作。但是,大约 2% 的时间,我得到的似乎是有效的身份验证 token ,但是当我去发布照片时,我收到以下错误“
我在 apple store 上有一个应用程序,在 iOS6 更新后,我在 MKMapView 中收到了数百份崩溃报告。我无法在我的设备上重现崩溃。它看起来像是 EAGLContext 的问题。我们不
我最近开始使用 Foundation 5(我第一次使用 Foundation),我遇到了一个问题,似乎任何元素都响应了 .click 事件(例如顶部导航栏,单击元素时显示的数据下拉列表)将随机不起作用
花了大约一整天的时间试图解决这个问题,希望有人能帮助我!我是新来的,所以如果这是一个重复的问题,我深表歉意(我做了我的研究,但无法提前找到任何东西)。 我正在为我的咨询公司构建的网站使用浏览器缓存,但
我有一个表格,使用了以下 CSS 和 HTML: .price { position:relative; display:block; text-align:center; }
我们使用 ansible 将多个节点配置为一个集群。这些机器是在自定义 AWS 类似基础设施上创建的实例。 我们在不同的剧本上有大约一百个任务,它们在每个节点上执行。 问题是,我们收到零星的主机无法访
我们偶尔会从用户那里收到崩溃报告(我们使用崩溃报告程序包将崩溃发送到我们的服务器),并出现以下错误: “非法尝试在不同上下文中的对象之间建立关系‘...’” (不同的报表可能有不同的关系,并非所有报表
我是一名优秀的程序员,十分优秀!