如何使用python

时间:2018-11-13 17:39:45

标签: python csv

我有一个csv文件test.csv。它有5000列。某些列(例如50列)在所有行中都具有相同的值。我怎样才能找到多少列具有相同的值,并在单独的csv中打印这些列。 例子

A B C D
1 2 2 3
1 2 3 3
1 2 4 3
1 2 5 3
1 2 7 3

我想找到具有相似值/元素(例如A,B和D)的列。然后分别在单独的CSV文件中打印A,B和D,在单独的CSV文件中打印C。

谢谢。

3 个答案:

答案 0 :(得分:0)

我建议使用熊猫。您可以使用以下类似的方法解决问题(应该可以开始使用)。

您需要查看此链接,该链接将为您提供10 minutes to pandas的概述(即读入/处理数据)

import pandas as pd

data = {
    'A': [1] * 5
    , 'B': [1] * 5
    , 'C': [1] * 5
    , 'D': [i for i in range(2, 7)]

}

df = pd.DataFrame(data)

# loop through each column
for col in df.columns.tolist():
    # check if every value in the column is equal to the first value
    if (df[col] == df[col][0]).all():
        print('all values match in {col}'.format(col=col))
    else:
        print('{col} has non-uniform values'.format(col=col))

答案 1 :(得分:0)

您可以将熊猫用于漂亮的IO。 只需编写一个函数来测试一列并选择合适的列即可:

输入:

b'\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x0bz\xcc\xc9\xc8\xc0\xc0\x00\xc2?\x82\x1e<\x0ec\xbc*8\x19\xc8i\xb3W_\x0b\x14bH\x00\xb2-\x99\x18\x18\xfe\x03\x01\x88\xcf\xc0\x01\xc4\xe1\x0c\xf9\x0cE\x0c\xd9\x0c\xc5\x0c\xa9\x0c%\x0c\x86`\xcd \x0c\x020\x1a\x00\x00\x00\xff\xff\x02\x080\x00\x96L~\x89W\x00\x00\x00\x00\x80(\\B\xefI;\x9e}p\xfe\x1a\xb2\x9b>(\x81\x86/=\xc9xH0:Pwb\xb7\xdck-\xd2F\x04\xd7co'

短路功能,仅在必要时比较所有值:

import pandas as pd
df=pd.read_csv()

输出:

from numba import njit
@njit # optional, for efficiency
def equal(arr):
    ref=arr[0]
    for x  in arr[1:]:
        if x != ref : return False
    return True

针对:

mask=df.apply(equal,axis=0,raw=True)
#[ True, True, False, True ]
df.loc[:,mask].to_csv('equal.csv',sep=' ',index=False)
df.loc[:,~mask].to_csv('notequal.csv',sep=' ',index=False)

A B D
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3

答案 2 :(得分:0)

只需找到只有1个唯一值的列:

创建一个DataFrame,我正在创建一些伪数据,您可以使用pd.read_csv读取csv。

>>> import pandas as pd
>>> df = pd.DataFrame(data={'A': [1,1,1,1,1,1,1], 'B': [2,2,2,2,2,2,2], 'C': [1,2,3,4,5,6,7]})
>>> df
   A  B  C
0  1  2  1
1  1  2  2
2  1  2  3
3  1  2  4
4  1  2  5
5  1  2  6
6  1  2  7

查找只有1个唯一值的列:

>>> equal_cols = [c for c in df.columns if len(df[c].unique()) == 1]
>>> equal_cols
['A', 'B']

将这些列写入sample1.csv,将所有其他列写入sample2.csv

>>> df[equal_cols].to_csv('sample1.csv')
>>> df[c for c in df.columns if c not in equal_cols].to_csv('sample2.csv')