读取csv

时间:2020-05-29 04:42:42

标签: python pandas dataframe

我有一个问题,当我用熊猫读取一个csv文件并将其标题分配为第0行时,其内容如下:

df = pd.read_csv(fileName, header = [0])

每行的前x列被分组并用括号括起来。 例如,如果我有以下内容:

Version, temp, altitude, oxygen, pressure, gas_temp, NH3, NO2
1,189,2980,489.9,594,345,345,22,00
2,11,33,423,554.9,2345,32,22,01

当我尝试从数据框中打印每一行时,我得到了:

(1,189,2980,489.9,594) 345 345 22 00
(2,11,33,423,554.9) 2345 32 22 01

如果我打电话给df['temp'],我会回来[345, 2345],这是不正确的,因为pandas将前x列分组在一起。

1 个答案:

答案 0 :(得分:0)

数据样本中最重要的差异是:

  • 仅包含 8 列名,
  • 但是有 9 个数据列。

另一种混乱情况是,列名称应分隔, 逗号,但您的输入中还包含空格。

上面的累积效果是 read_csv 被“骗了”并且可以读取 数据以这种怪异的方式。实际上,我第一次尝试复制您的 情况,但是下次(及以后所有时间)我得到了显然 正确的结果。

我写“显然”的原因是,当您打印df.columns时, 您会看到另一个缺陷:

Index(['Version', ' temp', ' altitude', ' oxygen', ' pressure', ' gas_temp',
       ' NH3', ' NO2'],
      dtype='object')

即列名称包含初始空格,因此尝试引用例如 到 temp 列会引发异常:

AttributeError: 'DataFrame' object has no attribute 'temp'

您可以正确读取此文件的一件事是传递 skipinitialspace = True 参数:

df = pd.read_csv(fileName, skipinitialspace=True, header=[0])

阅读结果是:

   Version  temp  altitude  oxygen  pressure  gas_temp  NH3  NO2
1      189  2980     489.9   594.0       345       345   22    0
2       11    33     423.0   554.9      2345        32   22    1

打印df.columns时,您会看到列名不带 初始空格,因此现在标题行中的这些多余空格已被删除。

read_csv 操作方式的另一个细节是,它与列名匹配 末尾是数据列,因此“附加”列(在数据行中) 用作索引列,没有名称。

您还可以添加 index_col = [0] 参数:

df = pd.read_csv(filename, skipinitialspace=True, index_col=[0], header=[0])

明确指定初始列为索引。