use*_*640 16 python duplicates multiple-columns dataframe pandas
我有一个巨大的DataFrame,有些列有相同的名称.当我尝试选择一个存在两次的列时(例如del df['col name'] 或df2=df['col name'])我得到一个错误.我能做什么?
Rom*_*kar 14
您可以按索引添加列:
>>> df = pd.DataFrame([[1,2],[3,4],[5,6]], columns=['a','a'])
>>> df
a a
0 1 2
1 3 4
2 5 6
>>> df.iloc[:,0]
0 1
1 3
2 5
Run Code Online (Sandbox Code Playgroud)
或者你可以重命名列,比如
>>> df.columns = ['a','b']
>>> df
a b
0 1 2
1 3 4
2 5 6
Run Code Online (Sandbox Code Playgroud)
小智 7
另一种解决方案:
def remove_dup_columns(frame):
keep_names = set()
keep_icols = list()
for icol, name in enumerate(frame.columns):
if name not in keep_names:
keep_names.add(name)
keep_icols.append(icol)
return frame.iloc[:, keep_icols]
import numpy as np
import pandas as pd
frame = pd.DataFrame(np.random.randint(0, 50, (5, 4)), columns=['A', 'A', 'B', 'B'])
print(frame)
print(remove_dup_columns(frame))
Run Code Online (Sandbox Code Playgroud)
输出是
A A B B
0 18 44 13 47
1 41 19 35 28
2 49 0 30 16
3 39 29 43 41
4 26 19 48 13
A B
0 18 13
1 41 35
2 49 30
3 39 43
4 26 48
Run Code Online (Sandbox Code Playgroud)
这不是一个好的情况。最好是创建一个分层列标签方案(Pandas 允许多级列标签或行索引标签)。确定是什么导致具有相同名称的两个不同列实际上彼此不同,并利用它来创建分层列索引。
同时,如果您知道有序列列表中列的位置(例如,来自dataframe.columns),那么您可以使用许多显式索引功能(例如.ix[]、 或 ).iloc[]从列中按位置检索值。
您还可以使用新名称创建列的副本,例如:
dataframe["new_name"] = data_frame.ix[:, column_position].values
Run Code Online (Sandbox Code Playgroud)
其中column_position引用您尝试获取的列的位置(而不是名称)。
但是,如果数据太大,这些可能对您不起作用。所以最好是想办法修改构造过程来得到分层列索引。