当我按照以下代码
在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中读取重复的列,或者在读取后删除重复的列。 Pl注意:一旦在Pandas中读取数据,列名就不同了,所以像df = df.loc [:,~df.columns.duplicated()]这样的命令不起作用。 实际数据库非常大,并且有许多重复列,仅包含日期。
答案 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