我有一个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。
谢谢。
答案 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')