在Pandas中删除具有重复值的列

时间:2018-04-10 13:06:14

标签: python python-3.x pandas dataframe

我有一个带有示例的数据库,如下所示: enter image description here

当我按照以下代码

在Python中加载数据时生成数据框
import os
import pandas as pd
data_dir="D:\\userdata\\adbharga\\Desktop\\AVA\\PythonCoding\\VF-Aus\\4G Cell Graphs"
os.chdir(data_dir)
df = pd.read_csv('CA Throughput(Kbit_s) .csv',index_col=None, header=0)

输出:

enter image description here

有什么办法可以避免在Pandas中读取重复的列,或者在读取后删除重复的列。 Pl注意:一旦在Pandas中读取数据,列名就不同了,所以像df = df.loc [:,~df.columns.duplicated()]这样的命令不起作用。 实际数据库非常大,并且有许多重复列,仅包含日期。

2 个答案:

答案 0 :(得分:3)

有两种方法可以做到这一点。

读取数据时忽略列

pandas.read_csv具有参数usecols,它接受​​整数列表。

所以你可以尝试:

# work out required columns
df = pd.read_csv('file.csv', header=0)
cols = [0] + list(range(1, len(df.columns), 2))

# use column integer list
df = pd.read_csv('file.csv', usecols=cols)

从数据框中删除列

您可以使用与pd.DataFrame.iloc类似的逻辑删除不需要的列。

# cols as defined in previous example

df = df.iloc[:, cols]

答案 1 :(得分:1)

这样做的一种方法是只读取第一行并使用drop_duplicates()创建一个掩码。我们传递给usecols而不需要事先指定索引。它应该是故障安全的。

m = pd.read_csv(pd.compat.StringIO(data),nrows=1, header=None).T.drop_duplicates().index
df = pd.read_csv(pd.compat.StringIO(data), usecols=m)

完整示例:

import pandas as pd

data = '''\
Date,Value1,Date,Value2
2018-01-01,0,2018-01-01,1
2018-01-02,0,2018-01-02,1'''

m = pd.read_csv(pd.compat.StringIO(data),nrows=1, header=None).T.drop_duplicates().index
df = pd.read_csv(pd.compat.StringIO(data), usecols=m)

print(df)

#         Date  Value1  Value2
#0  2018-01-01       0       1
#1  2018-01-02       0       1

另一种方法是删除.内的所有列。这应该适用于大多数情况,因为在列名中很少使用点:

df = df.loc[:,~df.columns.str.contains('.', regex=False)]

完整示例:

import pandas as pd

data = '''\
Date,Value1,Date,Value2
2018-01-01,0,2018-01-01,1
2018-01-02,0,2018-01-02,1'''


df = pd.read_csv(pd.compat.StringIO(data))
df = df.loc[:,~df.columns.str.contains('.', regex=False)]
print(df)

#         Date  Value1  Value2
#0  2018-01-01       0       1
#1  2018-01-02       0       1