我有一个问题,当我用熊猫读取一个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列分组在一起。
答案 0 :(得分:0)
数据样本中最重要的差异是:
另一种混乱情况是,列名称应仅分隔, 逗号,但您的输入中还包含空格。
上面的累积效果是 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])
明确指定初始列为索引。