【发布时间】:2021-01-04 17:38:55
【问题描述】:
一个文本文件看起来像这样。我想将其转换为 CSV 文件。
当我使用 Pandas 时:
df = pd.read_fwf(f)
看起来像:
似乎有制表符和空格用于分隔符,我将行改为:
df = pd.read_csv('Water level.txt' , sep = '[" "|\t]', encoding='GBK', engine = 'python')
但它警告:
pandas.errors.ParserError: Expected 14 fields in line 4, saw 16. Error could possibly be due to quotes being ignored when a multi-char delimiter is used.
使用 Python 将其转换为 CSV 文件的正确方法是什么?
【问题讨论】:
-
请注意,
[" "|\t]包含管道的匹配项 - 您在字符类中,它并不意味着“或”。您还匹配一个 single 空格,因此您可能有一些包含空字符串的字段。在处理“参差不齐”的数据方面,请参阅stackoverflow.com/q/46127026/3001761。 -
这些带引号的字段中是否有空格,例如
"North East",或者更糟糕的是,带空格的未引用字段?正则表达式解析器会将"North East"视为两列("North", "East")。 -
@jonrsharpe,感谢您的评论。也就是说,告诉 read_csv 列数。 :)
-
@tdelaney,感谢您的评论。幸好没有,只有“东”和“西”。
-
Pandas 需要猜测有多少列。在您的示例中,文件以 4 列开始并移动到 5。但是当第 5 列出现时,pandas 已经决定只有 4。由于没有定义所有列的标题行,您可以添加一个
names=["foo", "bar", "baz", etc...](使用 14 个更具描述性的名称)到read_csv。如果您只需要整数列名,您甚至可以使用names=range(14)。
标签: python pandas csv delimiter