python-3.x - CSV 文件中的污染。值为千的列中的逗号
问题描述
我认为数据清理存在小问题。在随附的 CSV 文件中输入指向 CSV 的链接。有人在第 7 行的“长度英尺”列中添加了逗号。我指出了图片上的位置。在此处输入图像描述
df=pd.read_csv('c:/2/runways.csv', error_bad_lines = True)
print(df)
df=pd.read_csv('c:/2/runways.csv', thousands=',')
print(df)
df=pd.read_csv('c:/2/runways.csv', decimal = ',')
我知道上面的说明不起作用。数据清理的方法对我来说至关重要。请帮我。每一次帮助都会获得奖励(当我的声望超过 15 时)。
解决方案
我没有仔细查看数据文件,但它似乎遵循一个非常简单的模式:(#,#,"cccc",#,#...
其中#
是一个数字,c
是一个字母数字字符)。
该模式可以相当容易地转换为正则表达式模式,例如:^(\d+,\d+,"[\dA-Z]{4}",)(\d+),(\d{3},\d+)
此 RegEx 模式将检测在“airport_ident”和“surface”字段之间包含 3 组逗号分隔数字的行,更重要的是,它只会在第二个该组的数字正好是 3 位数长,因为这表明逗号旨在用作千位分隔符。
由于分组,您可以利用反向引用来替换千位分隔符。例如,在 Atom(文本编辑器)中弄乱了这个,我使用了 RegEx 替换模式$1$2$3
,因为千位分隔符逗号不在第二个和第三个捕获组之外。在 python 中,这就像
import re
raw_lines = ""
with open('/path/to/file', 'r') as fh:
raw_lines = fh.read()
cleaned_lines = re.sub(
r'^(\d+,\d+,"[\dA-Z]{4}",)(\d+),(\d{3},\d+)',
r'\1\2\3',
raw_lines,
re.IGNORECASE
)
也就是说,正如他的回答中所报告的那样,当我在文本编辑器中打开 CSV 文件时,我没有看到任何有问题的行。
推荐阅读
- sql-server - 从包含用逗号分隔的多个值的另一行中选择表中的多行
- python-3.x - Python:遍历图像中的每个像素以进行图像识别
- angular - Azure Application Insights Angular 防止记录某些数据
- azure-devops - 在同一代理上运行 linux docker 容器和 VsTest
- python - Python Sqlite 如何使用外键从不同的表中打印数据?
- postman - Postman 中根据 HTTP 方法类型运行不同的采集测试
- jquery - Ruby on rails 使用带有引导程序的功能的菜单问题
- java - Java 9 模块/服务系统 - 按名称获取实例化服务提供者,或者如果不存在则获取新服务提供者?
- linux - 计算文件夹中所有文件的总行数
- azure - 在 ForEach 活动 Azure 数据工厂中的 Activity 中迭代