gpt4 book ai didi

python - pandas read_csv 列标题中带有井号

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:56 24 4
gpt4 key购买 nike

我需要从制表符分隔的文件中读取数据,其中第一行包含列标题,但该行的第一个字符是井号/octothorpe/hastag/#.

数据如下所示:

#   year-month-day  spam    eggs
1956-01-31 11 21
1985-03-20 12 22
1940-11-22 13 23

read_csv 犯了 3 个错误: 1. 它将包含任何前导井号作为其自己的唯一列,或作为第一列的第一个字符,导致列过多或保留空格、制表符和逗号作为列名的一部分,即使它被告知这是分隔符。 2. 制表符、空格、逗号、单引号和双引号分隔符将随机用作列的分隔符,文档中未定义优先级系统,具体取决于分隔符是否紧邻空格,例如 ' abc','xyz''abc', 'xyz'3. 如果转义被定义为反斜杠,那么转义字符将不会被视为文字。4. 如果您要求 pandas 推断上述任何内容或 header ,以上所有内容都将被错误推断。

看起来唯一可行的选择是 1:推出自己的告诉标题读取函数,然后 2:告诉 pandas read_csv 忽略标题列。

有更好的方法吗?

最佳答案

这给出了所需的 DataFrame

from io import StringIO
import pandas as pd

FILE_CONTENTS = """\
# year-month-day spam eggs
1956-01-31 11 21
1985-03-20 12 22
1940-11-22 13 23
"""
df = pd.read_csv(StringIO(FILE_CONTENTS), delim_whitespace=True, escapechar='#')
df.columns = df.columns.str.strip()

注意编辑后包括 EdChum修复了初始列中的前导空白,在 comment 中提供.

似乎比我尝试过的各种拼凑更可取:

with open(filename) as f:
header = f.readline()
cols = header.strip('#').split()
df = pd.read_csv(..., comment='#', names=cols)

编辑:看到Nickil Maveli的回答我意识到我必须处理两者 #<space>year-month-day ... #<tab>year-month-day ...在文件头中。因此,我们需要结合 Nikil 和 EdChum 的方法

关于python - pandas read_csv 列标题中带有井号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39485976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com