对于不规则的分隔符,如何使 pandas read_csv 中的分隔符相对于空格更加灵活?
- 2025-01-22 08:45:00
- admin 原创
- 70
问题描述:
我需要使用方法从文件中读取数据来创建数据框read_csv
。但是,分隔符不是很规则:一些列由制表符 (
) 分隔,其他列由空格分隔。此外,一些列可以由 2 个或 3 个或更多空格分隔,甚至可以由空格和制表符的组合分隔(例如 3 个空格、2 个制表符和 1 个空格)。
有没有办法告诉熊猫正确处理这些文件?
顺便说一句,如果我使用 Python,就不会遇到这个问题。我使用:
for line in file(file_name):
fld = line.split()
而且它运行完美。它不关心字段之间是否有 2 个或 3 个空格。即使是空格和制表符的组合也不会造成任何问题。pandas 能做到同样的事情吗?
解决方案 1:
从文档中,您可以使用正则表达式或delim_whitespace
:
>>> import pandas as pd
>>> for line in open("whitespace.csv"):
... print repr(line)
...
'a b c 1 2
'
'd e f 3 4
'
>>> pd.read_csv("whitespace.csv", header=None, delimiter=r"s+")
0 1 2 3 4
0 a b c 1 2
1 d e f 3 4
>>> pd.read_csv("whitespace.csv", header=None, delim_whitespace=True)
0 1 2 3 4
0 a b c 1 2
1 d e f 3 4
解决方案 2:
>>> pd.read_csv("whitespace.csv", header = None, sep = "s+| +|s+ +| +s+")
将使用任意数量的空格和制表符的任意组合作为分隔符。
解决方案 3:
Pandas 有两个 csv 读取器,仅在处理冗余前导空格方面具有灵活性:
pd.read_csv("whitespace.csv", skipinitialspace=True)
而一个不是
pd.DataFrame.from_csv("whitespace.csv")
对于尾随空格,两者都不是现成的灵活性,请参阅使用正则表达式的答案。避免使用 delim_whitespace,因为它也只允许空格(没有 , 或 \t)作为分隔符。
解决方案 4:
我们可以考虑处理所有的组合以及零次或多次出现的情况。
pd.read_csv("whitespace.csv", header = None, sep = "[ ]*,[ ]*")
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD