将列名传递给Pandas read_csv()函数

3

我有一个csv文件,长这样:

,time,o,h,l,c
0,2021-03-17 09:30:00,101.25,103.98,90.17,101.78
1,2021-03-17 09:45:00,102.83,107.49,95.22,101.93
2,2021-03-17 10:00:00,100.92,102.90,97.19,102.80

我正在使用以下方式通过 read_csv 函数读取这些数据:

cols = ['indx', 'timestamp', 'open', 'high', 'low', 'close']
df = pd.read_csv('prices.csv', names=cols)

生成的数据框如下所示:
    Unnamed: 0  time                o       h       l       c
0   0           2021-03-17 09:30:00 101.25  103.98  90.17   101.78
1   1           2021-03-17 09:45:00 102.83  107.49  95.22   101.93
2   2           2021-03-17 10:00:00 100.92  102.90  97.19   102.80

传递names参数似乎对列名没有任何影响。

编辑

根据文档,传递header参数会导致相同的行为。

cols = ['indx', 'timestamp', 'open', 'high', 'low', 'close']
df = pd.read_csv('prices.csv', header=0, names=cols)

我需要传递read_csv函数中的另一个参数来自定义列名吗?

谢谢!


1
文档(强调是我的)中得知:“names:要使用的列名列表。_如果文件包含标题行,则应明确传递header = 0以覆盖列名。_此列表中不允许重复项。” - G. Anderson
1
@richardec -- 我编辑了原始问题。 - equanimity
这不可能是你的原始CSV文件。它根本不是CSV文件 - 里面没有逗号。@equinimity 这个问题很难理解。你能否提供你正在使用的数据和代码? - user17242583
@richardec -- 编辑了原始问题。请注意标题行中的前导逗号(可能是原因)。 - equanimity
1
我无法复现,给定的文件产生了预期的结果。 - G. Anderson
显示剩余3条评论
1个回答

2

我猜你需要在read_csv中传递header=0参数:

df = pd.read_csv('prices.csv', names=cols, header=0)

输出:

>>> df
   indx            timestamp    open    high    low   close
0     0  2021-03-17 09:30:00  101.25  103.98  90.17  101.78
1     1  2021-03-17 09:45:00  102.83  107.49  95.22  101.93
2     2  2021-03-17 10:00:00  100.92  102.90  97.19  102.80

虽然文档中说“显式传递header=0”,但我认为他们真正的意思是“传递header=[实际标题行号]”。这样可以让你跳过标题上方的任何文本,同时用所需的列名替换标题列名。 - johnDanger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接