读取CSV文件时pandas多索引列标题更改类型

亚瑟

我有一个对列和行都使用多索引的 Pandas 数据框。这是一个简化的示例:

import pandas as pd
import datetime

col1 = [datetime.date(2018, 1, 1)+i*datetime.timedelta(days=1) for i in range(4) for j in range(2)]
col2 = [     'lunch',     'dinner',      'lunch',     'dinner',
             'lunch',     'dinner',      'lunch',     'dinner']

hdr1 = ['starter', 'starter', 'main', 'main', ' main', 'dessert', 'dessert']
hdr2 = [        0,         1,      0,      1,       2,         0,         1]

col_index = pd.MultiIndex.from_arrays([col1, col2], names=['date', 'meal'])
row_index = pd.MultiIndex.from_arrays([hdr1, hdr2], names=['dish', 'content'])

df = pd.DataFrame(index=col_index, columns=row_index)

如果我尝试打印特定的单元格,它工作正常:

In [45]: df.loc[('2018-01-02', 'lunch'), ('starter', 0)]
Out[45]: 
date        meal 
2018-01-02  lunch    NaN
Name: (starter, 0), dtype: object

但是,如果我将其保存到 CSV 文件并再次阅读:

# write to CSV
df.to_csv('test.csv')

# read from CSV
df = pd.read_csv('test.csv', index_col=[0, 1], header=[0, 1], parse_dates=True)

这是相同命令的结果:

In [47]: df.loc[('2018-01-02', 'lunch'), ('starter', 0)]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-47-d0a7081dd150> in <module>()
----> 1 df.loc[('2018-01-02', 'lunch'), ('starter', 0)]
[...]

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: ('starter', 0)

原因是从CSV文件中读取数据框时,列索引的第二层不再是整数,而是字符串:

In [55]: df.columns.get_level_values(1)
Out[55]: Index(['0', '1', '0', '1', '2', '0', '1'], dtype='object', name='content')

知道如何强制将二级索引读取为整数而不是字符串吗?

cs95

我担心唯一的选择就是硬着头皮修复你的标题;使用pd.MultiIndex.set_levels.

df.columns = df.columns.set_levels(
      df.columns.get_level_values(1).astype(int), level=1
)

df.loc[('2018-01-02', 'lunch'), ('starter', 0)]

date        meal 
2018-01-02  lunch    NaN
Name: (starter, 0), dtype: object

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从CSV文件读取时如何更改列的数据类型

来自分类Dev

读取多索引Excel文件并重塑Pandas中的标题

来自分类Dev

pandas 数据框:从单索引更改为多列索引

来自分类Dev

熊猫:多索引列标题

来自分类Dev

使用 Pandas 读取带有稀疏标记列标题的 CSV

来自分类Dev

读取CSV文件时如何跳过列?

来自分类Dev

如何使用Python读取CSV文件的标题列?

来自分类Dev

读取具有不同标题/列的csv日志文件

来自分类Dev

从终端中的csv文件读取列而忽略标题

来自分类Dev

GnuPlot自动设置xlabel(或ylabel),从CSV文件的列标题读取

来自分类Dev

如何使用Pandas读取不包含标题的CSV文件,仅捕获第一列中的数据并执行删除操作?

来自分类Dev

更改多索引Pandas数据框中的列分组

来自分类Dev

从CSV读取时,如何在Dask中添加索引列?

来自分类Dev

在读取 csv 文件时向数据框添加一列 [pandas]

来自分类Dev

动态更改CSV文件的标题

来自分类Dev

如何从索引更改为多索引-Pandas

来自分类Dev

如何读取csv文件,并根据csv中的数据添加标题和新列并输出新的csv

来自分类Dev

使用 Pandas 读取 csv 文件时,它会为 /: 'module' 和 'str' 输出不支持的操作数类型

来自分类Dev

熊猫读取带空白的多索引csv

来自分类Dev

使用熊猫读取csv时设置列类型

来自分类Dev

使用Pandas在python中读取csv文件时出错

来自分类Dev

使用 glob、os 使用 pandas 读取 csv 文件时出错

来自分类Dev

保存多索引csv文件时,如何正确处理命名索引?

来自分类Dev

更改从 *.csv 文件读取的数据

来自分类Dev

读取具有多个标题的CSV文件

来自分类Dev

读取 txt 文件并将固定标题/列添加到新的 csv 文件

来自分类Dev

将熊猫索引更改为列标题

来自分类Dev

将熊猫索引更改为列标题

来自分类Dev

在pandas csv读取时处理未知数量的列

Related 相关文章

  1. 1

    从CSV文件读取时如何更改列的数据类型

  2. 2

    读取多索引Excel文件并重塑Pandas中的标题

  3. 3

    pandas 数据框:从单索引更改为多列索引

  4. 4

    熊猫:多索引列标题

  5. 5

    使用 Pandas 读取带有稀疏标记列标题的 CSV

  6. 6

    读取CSV文件时如何跳过列?

  7. 7

    如何使用Python读取CSV文件的标题列?

  8. 8

    读取具有不同标题/列的csv日志文件

  9. 9

    从终端中的csv文件读取列而忽略标题

  10. 10

    GnuPlot自动设置xlabel(或ylabel),从CSV文件的列标题读取

  11. 11

    如何使用Pandas读取不包含标题的CSV文件,仅捕获第一列中的数据并执行删除操作?

  12. 12

    更改多索引Pandas数据框中的列分组

  13. 13

    从CSV读取时,如何在Dask中添加索引列?

  14. 14

    在读取 csv 文件时向数据框添加一列 [pandas]

  15. 15

    动态更改CSV文件的标题

  16. 16

    如何从索引更改为多索引-Pandas

  17. 17

    如何读取csv文件,并根据csv中的数据添加标题和新列并输出新的csv

  18. 18

    使用 Pandas 读取 csv 文件时,它会为 /: 'module' 和 'str' 输出不支持的操作数类型

  19. 19

    熊猫读取带空白的多索引csv

  20. 20

    使用熊猫读取csv时设置列类型

  21. 21

    使用Pandas在python中读取csv文件时出错

  22. 22

    使用 glob、os 使用 pandas 读取 csv 文件时出错

  23. 23

    保存多索引csv文件时,如何正确处理命名索引?

  24. 24

    更改从 *.csv 文件读取的数据

  25. 25

    读取具有多个标题的CSV文件

  26. 26

    读取 txt 文件并将固定标题/列添加到新的 csv 文件

  27. 27

    将熊猫索引更改为列标题

  28. 28

    将熊猫索引更改为列标题

  29. 29

    在pandas csv读取时处理未知数量的列

热门标签

归档