熊猫在巨大的csv文件中查找常量变量

熊猫在巨大的csv文件中查找常量变量,csv,pandas,bigdata,Csv,Pandas,Bigdata,我有一个大的csv文件,我不能加载到内存中。我需要找出哪些变量是常数。我该怎么做? 我正在阅读csv作为 d = pd.read_csv(load_path, header=None, chunksize=10) 有没有优雅的方法来解决这个问题 数据包含字符串和数字变量这是我目前不使用熊猫的慢速解决方案 constant_variables = [True for i in range(number_of_columns)] with open(load_path) as f:

我有一个大的csv文件,我不能加载到内存中。我需要找出哪些变量是常数。我该怎么做? 我正在阅读csv作为

d = pd.read_csv(load_path, header=None, chunksize=10)
有没有优雅的方法来解决这个问题


数据包含字符串和数字变量

这是我目前不使用熊猫的慢速解决方案

    constant_variables = [True for i in range(number_of_columns)]
    with open(load_path) as f:
        line0 = next(f).split(',')
        for num, line in enumerate(f):
            line = line.split(',')
            for i in range(n_col):
                if line[i] != line0[i]:
                    constant_variables[i] = False
            if num % 10000 == 0:
                print(num)

我可以想到两种方法迭代每一列并检查唯一性:

col_list = pd.read_csv(path, nrows=1).columns
for col in range(len(col_list)):
    df = pd.read_csv(path, usecols=col)
    if len(df.drop_duplicates()) == len(df):
        print("all values are constant for: ", df.column[0])
或者分块迭代csv并再次检查长度:

for df in pd.read_csv(path, chunksize=1000):
    t = dict(zip(df, [len(df[col].value_counts()) for col in df]))
    print(t)

后者将分块读取并告诉您每列数据的唯一性,这只是一个粗略的代码,您可以根据需要修改它

您是说所有行值都是相同的吗?您可以将csv分块加载,然后比较
value_counts()==len(df)
您的意思是在块上迭代并每次检查吗?您能定义问题的真正原因吗,您可以为整个csv在每列中加载并检查所有值是否相同,也可以加载块,然后在每次迭代中比较值的唯一性这很好我只是想知道是否有更快的内置方法。考虑到您不能逐个块单独检查,因为函数在块上可能是常量,但通常不是。最后,你将得到一个类似于我在下面提出的方法。