目录
1、 需要分别查看行索引和列索引网上很多方法是重置行索引,有可能还是无法解决问题,原因是可能是列索引存在重复的情况
2、重置行索引办法
df.reset_index(drop=True, inplace=True)
3、重置列索引方法查看重复的列,然后删除重复列即可
利用pandas的concat方法报错如下 :
Traceback (most recent call last):
File "E:\价格v1.1 .py", line 357, in <module>
getAllProduct()
File "E:\价格v1.1 .py", line 120, in getAllProduct
df3 = ji(hebing_df)
File "E:\价格v1.1 .py", line 157, in ji
df2 = (df_list)
File "D:\Python310\lib\site-packages\pandas\util\_decorators.py", line 311, in wrapper
return func(*args, **kwargs)
File "D:\Python310\lib\site-packages\pandas\core\reshape\", line 360, in concat
return op.get_result()
File "D:\Python310\lib\site-packages\pandas\core\reshape\", line 591, in get_result
indexers[ax] = obj_labels.get_indexer(new_labels)
File "D:\Python310\lib\site-packages\pandas\core\indexes\", line 3721, in get_indexer
raise InvalidIndexError(self._requires_unique_msg)
: Reindexing only valid with uniquely valued Index objects
利用pandas的concat方法可以对多个DataFrame进行快捷的堆叠,非常方便,但是在使用concat会出现“: Reindexing only valid with uniquely valued Index objects
”的提示,翻译过来就是:使用pandas对df进行concat操作时,相应的行、列索引必须唯一
问题原因
索引由于特殊操作存在重复的情况
解决办法
1、 需要分别查看行索引和列索引
网上很多方法是重置行索引,有可能还是无法解决问题,原因是可能是列索引存在重复的情况、
2、重置行索引办法
df.reset_index(drop=True, inplace=True)
3、重置列索引方法
查看重复的列,然后删除重复列即可
import pandas as pd
df=pd.read_table(fname)
列名为:
Time, Time Relative, N2, Time, Time Relative, H2, etc...
所有时间和时间相关列都包含相同的数据。我想要:
Time, Time Relative, N2, H2
我试图删除的所有尝试,如:
df=.drop_duplicates().T
导致唯一值索引错误:
Reindexing only valid with uniquely valued index objects
解决:
df = [:,~()]
工作原理:
假设数据帧的列是['alpha','beta','alpha']
()
为每列返回一个布尔数组:aTrue
或False
。如果是False
,那么列名在这一点上是唯一的,如果是True
,那么列名在前面是重复的。例如,使用给定的示例,返回值将是[False,False,True]
。
Pandas
允许使用布尔值进行索引,从而只选择True
值。因为我们想保留未重叠的列,所以需要翻转上面的布尔数组(即[True, True, False] = ~[False,False,True]
)
最后,[:,[True,True,False]]
使用上述索引功能只选择不重复的列。
注意:上面只检查列名称,不检查列值。