删除后无法将列读取到多索引数据帧

2024-04-26 05:52:14 发布

您现在位置:Python中文网/ 问答频道 /正文

奇怪的是,在删除一列之后,我不能用相同的名称将它添加回去。因此,我创建了一个带有多个标记列的简单数据框,并添加了一个仅具有level0名称的新列,然后将其删除。你知道吗

>>> import pandas as pd
>>> df = pd.DataFrame([[1,2,3],[4,5,6]])
>>> df.columns=[['a','b','c'],['e','f','g']]
>>> print(df)
   a  b  c
   e  f  g
0  1  2  3
1  4  5  6
>>> df['d'] = df.c+2
>>> print(df)
   a  b  c  d
   e  f  g   
0  1  2  3  5
1  4  5  6  8
>>> del df['d']
>>> print(df)
   a  b  c
   e  f  g
0  1  2  3
1  4  5  6

现在我再次尝试添加它,它似乎没有效果,也没有显示错误或警告。你知道吗

>>> df['d'] = df.c+2
>>> print(df)
   a  b  c
   e  f  g
0  1  2  3
1  4  5  6

这是预期的行为吗?我应该向熊猫项目报告错误报告吗?如果我添加指定了两个级别的“d”列,则不会出现这样的问题,如下所示

df['d', 'x'] = df.c+2

谢谢你, PS:Python是2.7.14和0.20.1


Tags: columns数据标记import名称dataframepandasdf
1条回答
网友
1楼 · 发布于 2024-04-26 05:52:14

调用del后,您的MultiIndex级别没有被删除,这是一个问题:

del df['d']
print(df)
   a  b  c
   e  f  g
0  1  2  3
1  4  5  6

检查列:

print (df.columns)
MultiIndex(levels=[['a', 'b', 'c', 'd'], ['e', 'f', 'g', '']],
           labels=[[0, 1, 2], [0, 1, 2]])

删除的解决方案是^{}

df.columns = df.columns.remove_unused_levels()

print (df.columns)
MultiIndex(levels=[['a', 'b', 'c'], ['e', 'f', 'g']],
           labels=[[0, 1, 2], [0, 1, 2]])

df['d'] = df.c+2
print (df)
   a  b  c  d
   e  f  g   
0  1  2  3  5
1  4  5  6  8

另一种解决方案是重新分配到多索引,需要tuple作为select MultiIndex列:

df[('d', '')] = df.c+2
print (df)
   a  b  c  d
   e  f  g   
0  1  2  3  5
1  4  5  6  8

相关问题 更多 >