从 URL 导入数据时单列中的 NaN

NaN in single column while importing data from URL

我正在尝试从 URL 导入热门 MPG dataset from UCI 的所有 9 列。问题是 Carname(第九列)由 NaN.

填充,而不是显示的字符串值

出了什么问题,如何解决?存储库的 link 显示原始数据集有 9 列,所以这应该有效。

从URL和我们发现数据看起来像

18.0   8   307.0      130.0      3504.      12.0   70  1    "chevrolet chevelle malibu"
15.0   8   350.0      165.0      3693.      11.5   70  1    "buick skylark 320"

Carname 上具有唯一的字符串值,但是当我们将其导入为

import pandas as pd
# Import raw dataset from URL
url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'
column_names = ['MPG', 'Cylinders', 'Displacement', 'Horsepower', 
                'Weight', 'Acceleration', 'Model Year', 'Origin',  'Carname']

data = pd.read_csv(url, names=column_names,
                      na_values='?', comment='\t',
                      sep=' ', skipinitialspace=True)
data.head(3)

屈服(NaNCarname

    MPG     Cylinders   Displacement    Horsepower  Weight  Acceleration    Model Year  Origin  Carname
0   18.0    8           307.0           130.0       3504.0   12.0           70          1       NaN
1   15.0    8           350.0           165.0       3693.0   11.5           70          1       NaN

它确实在您的 read_csv 调用中:comment='\t'。唯一的制表符在 Carname 字段之前,这意味着您阅读文件的方式会明确忽略该列。

您可以删除 comment 参数并使用更通用的分隔符 \s+ 来拆分任何空格(一个或多个空格、制表符等):

>>> pd.read_csv(url, names=column_names, na_values='?', sep='\s+')
      MPG  Cylinders  Displacement  Horsepower  Weight  Acceleration  Model Year  Origin                    Carname
0    18.0          8         307.0       130.0  3504.0          12.0          70       1  chevrolet chevelle malibu
1    15.0          8         350.0       165.0  3693.0          11.5          70       1          buick skylark 320
2    18.0          8         318.0       150.0  3436.0          11.0          70       1         plymouth satellite
3    16.0          8         304.0       150.0  3433.0          12.0          70       1              amc rebel sst
4    17.0          8         302.0       140.0  3449.0          10.5          70       1                ford torino
..    ...        ...           ...         ...     ...           ...         ...     ...                        ...
393  27.0          4         140.0        86.0  2790.0          15.6          82       1            ford mustang gl
394  44.0          4          97.0        52.0  2130.0          24.6          82       2                  vw pickup
395  32.0          4         135.0        84.0  2295.0          11.6          82       1              dodge rampage
396  28.0          4         120.0        79.0  2625.0          18.6          82       1                ford ranger
397  31.0          4         119.0        82.0  2720.0          19.4          82       1                 chevy s-10

[398 rows x 9 columns]