给定CSV文件时,使用pandas读取CSV文件时需要指定列名。

159

这是我的数据集示例。

>>> user1 = pd.read_csv('dataset/1.csv')
>>> print(user1)
          0  0.69464   3.1735   7.5048
0  0.030639  0.14982  3.48680   9.2755
1  0.069763 -0.29965  1.94770   9.1120
2  0.099823 -1.68890  1.41650  10.1200
3  0.129820 -2.17930  0.95342  10.9240
4  0.159790 -2.30180  0.23155  10.6510
5  0.189820 -1.41650  1.18500  11.0730

如何将第一列下移并将名称列 [TIME,X,Y 和 Z] 添加到第一列。

期望的输出如下所示:

       TIME        X        Y        Z
0         0  0.69464   3.1735   7.5048
1  0.030639  0.14982  3.48680   9.2755
2  0.069763 -0.29965  1.94770   9.1120
3  0.099823 -1.68890  1.41650  10.1200
4  0.129820 -2.17930  0.95342  10.9240
5  0.159790 -2.30180  0.23155  10.6510
6  0.189820 -1.41650  1.18500  11.0730
6个回答

240

我会这样做:

colnames=['TIME', 'X', 'Y', 'Z'] 
user1 = pd.read_csv('dataset/1.csv', names=colnames, header=None)

4
既然我们已经提供了列名,那么header=None是否必要? - Joris Limonier
3
如果提供了列名,则不需要参数header。根据文档:“如果显式传递了列名,则行为与header = None相同”。请参见https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html。 - Bernard Esterhuyse
我可以直接排除其中的一些列吗? - skan
header=None会产生大量的错误信息。Pandas版本为1.5.3,Python版本为3.11.4,操作系统为MacOS Monterey。 - Seshadri R

28

我们可以用一行代码完成它。

 user1 = pd.read_csv('dataset/1.csv', names=['TIME', 'X', 'Y', 'Z'], header=None)

13

如果我们直接使用来自csv文件的数据,它将基于逗号分隔值合并数据。

user1 = pd.read_csv('dataset/1.csv')
如果您想使用pandas添加列名,您需要像这样执行操作。但以下代码将不会为您的列显示单独的标题。
col_names=['TIME', 'X', 'Y', 'Z'] 
user1 = pd.read_csv('dataset/1.csv', names=col_names)
为了解决上述问题,我们需要添加额外的填充,这可以通过pandas中支持的 header=None 实现。
user1 = pd.read_csv('dataset/1.csv', names=col_names, header=None)

11

除了上面的答案之外,如果您的数据集已经有列名并且您想要用自定义名称替换它,则设置header=0而不是header=None


获取它们的方法:columns = chunk.columns.tolist() - Matt
这个真的很有用,我觉得至少应该在回答中提到一下,尽管它不是OP所问的。 - Sacha

8
user1  = pd.read_csv('dataset/1.csv',  names=['Time',  'X',  'Y',  'Z']) 

read_csv函数中的names参数用于定义列名。如果在这个列表中传递了额外的名称,它会添加另一列带有该名称和NaN值。

如果CSV文件中已经存在列名,则可以使用header=None来删除列名。


1

如果数据集过大,使用nrows=1可避免消耗过多的加载时间。


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