如何在pandas.read_csv中忽略#开头的注释行但保留数据内容中的#符号?
如何在pandas.read_csv中忽略#开头的注释行但保留数据内容中的#符号?
这个问题我之前也踩过坑!pandas自带的comment='#'参数逻辑有点“一刀切”——它会把每一行里第一个出现的#之后的所有内容都当作注释截断,不管这个#是不是在注释行的开头,这就导致你数据列里的#python、#rstats被误判成注释,最后变成了NaN。
那怎么解决呢?其实我们可以先手动过滤掉真正的注释行(也就是以#开头的行),再把处理后的内容传给read_csv,这样就完全不会影响数据里的#符号了。
给你写个具体的代码示例:
import pandas as pd from io import StringIO csv_content = """\ # title: Sample CSV # description: This dataset id,name,favourite_hashtag 1,John,#python 2,Jane,#rstats """ # 过滤掉以#开头的行(用lstrip()处理了行首可能存在的空格) filtered_lines = [line for line in csv_content.splitlines() if not line.lstrip().startswith('#')] # 把过滤后的行重新拼成可读取的字符串 filtered_content = "\n".join(filtered_lines) # 读取处理后的内容 data = pd.read_csv(StringIO(filtered_content)) print(data)
运行这段代码后,输出就完全符合预期了:
id name favourite_hashtag 0 1 John #python 1 2 Jane #rstats
至于你问的能不能提feature request?当然有希望!你可以去pandas的GitHub仓库提交需求,不过记得先搜一下有没有人已经提过类似的issue。提交的时候讲清楚你的需求:希望comment参数可以只识别**行首的#**作为注释行的标记,而不是行内任意位置的#,这样就能同时兼顾注释行过滤和数据内#符号的保留了。
备注:内容来源于stack exchange,提问作者matentzn
相关产品推荐
相关产品推荐

