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

3
我有一个以下示例的数据库: 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)

输出:

输入图像说明

有没有办法在 Pandas 中避免读取重复的列,或者在读取后删除重复的列。 请注意:一旦数据被 Pandas 读取,列名就会不同,因此像 df=df.loc[:,~df.columns.duplicated()] 这样的命令将不起作用。 实际数据库非常大,只有日期是重复的。


2
@scott boston,我尝试过了,但不确定mangle_dupe_cols是否按照应有的方式工作。它会出现错误提示:“暂不支持设置mangle_dupe_cols=False”。目前有许多线程也在讨论这个命令无法正常工作的问题。 - Aditya Bhargava
2个回答

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

一种方法是只读取第一行,然后使用 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接