防止 pandas read_csv 将第一行视为列名的标题

新手上路,请多包涵

我正在阅读 pandas DataFrame 使用 pd.read_csv 。我想将第一行保留为数据,但它会不断转换为列名。

  • 我试过 header=False 但这只是完全删除了它。

(注意我的输入数据:我有一个字符串( st = '\n'.join(lst) ),我将其转换为类似文件的对象( io.StringIO(st) ),然后构建 csv 那个文件对象。)

原文由 Rafael 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

You want header=None the False gets type promoted to int into 0 see the docs emphasis mine:

header :整数或整数列表,默认“推断”行号用作列名,以及数据的开头。如果没有传递名称,默认行为就好像设置为 0 ,否则为 None 。显式传递 header=0 以能够替换现有名称。标题可以是一个整数列表,指定列上多索引的行位置,例如 [0,1,3]。将跳过未指定的中间行(例如,跳过此示例中的 2)。注意如果skip_blank_lines=True这个参数会忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。

您可以看到行为上的差异,首先是 header=0

 In [95]:
import io
import pandas as pd
t="""a,b,c
0,1,2
3,4,5"""
pd.read_csv(io.StringIO(t), header=0)

Out[95]:
   a  b  c
0  0  1  2
1  3  4  5

现在有了 None

 In [96]:
pd.read_csv(io.StringIO(t), header=None)

Out[96]:
   0  1  2
0  a  b  c
1  0  1  2
2  3  4  5

请注意,在最新版本 0.19.1 中,这将引发 TypeError

 In [98]:
pd.read_csv(io.StringIO(t), header=False)

类型错误:将布尔值传递给标头无效。使用 header=None 表示没有 header 或 header=int 或 list-like of ints 来指定构成列名的行

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想你需要参数 header=Noneread_csv

样本:

 import pandas as pd
from pandas.compat import StringIO

temp=u"""a,b
2,1
1,1"""

df = pd.read_csv(StringIO(temp),header=None)
print (df)
   0  1
0  a  b
1  2  1
2  1  1

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏