Supposons que j'ai des données au format suivant:
C0 C1 C2 C3 C4 C5 C6 C7 C8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 4 5 6 0 0 0 1 4 5 6 7 8 0 0 0 0 0 0 0 0 0 0 0
Je veux sélectionner des colonnes non nulles, telles que la colonne C1, C2, C3, C4, C5, C6 code> en python. Toute commande pouvant me donner directement le format souhaité.
4 Réponses :
Si vous utilisez une bibliothèque comme les pandas, alors c'est beaucoup plus simple
Vous prenez juste la moyenne de chaque colonne et si elles sont supérieures à 0, ce sont vos colonnes obligatoires
Pour cela, je vais donner vous un morceau de code:
import pandas as pd
df = pd.read_csv("File Path")
a = df.mean(axis=0) #gives you column wise mean
for i in len(a):
if a[i] > 0:
print(i) # i will be your column
comme les tableaux sont de plus grande taille, je ne pense pas qu'avec une boucle, ce serait une bonne idée d'obtenir le résultat souhaité car cela demanderait un temps de calcul important.
Ce tableau est de taille no_of_columns
@RayyanKhan .any () semble la seule autre méthode, mais cela aussi utilise des boucles
Oui mais pour vous faire comprendre j'ai utilisé cette méthode
Si cela vous a aidé, veuillez en faire une réponse vérifiée
Supposons que votre matrice est implémentée comme une liste de listes, où le premier index est la colonne, le deuxième index est la ligne:
nonzero_columns = [column for column in matrix if any(column)] # any() will return true here if any element of column is nonzero
Ensuite, vous pouvez utiliser une compréhension de liste pour obtenir une liste des seules colonnes de matrix qui ne sont pas toutes des zéros
matrix[3][2] == 3
Vous pouvez utiliser n'importe quel avec l'indexation numpy pour sélectionner des colonnes avec des valeurs différentes de zéro.
Configuration strong>
array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 2, 3, 4, 5, 6],
[1, 4, 5, 6, 7, 8],
[0, 0, 0, 0, 0, 0]], dtype=int64)
a[:, a.any(0)]
a = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 2, 3, 4, 5, 6, 0, 0],
[0, 1, 4, 5, 6, 7, 8, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int64)
Merci pour votre gentille réponse. De plus, si je veux exclure des lignes de la même manière, comme si je veux les lignes 2 et 3, quelle commande dois-je utiliser?
Les lignes seraient a [a.any (1)]
Avec numpy :
columns = ['C0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8'] s = pd.DataFrame(data=a, columns=columns).any() s = s[s == 1] >>> s C1 True C2 True C3 True C4 True C5 True C6 True dtype: bool
Si vous en avez besoin comme noms de colonne ( C1 , C2 , C3 , C4 , C5 , C6 ), utilisez pandas : p >
import numpy as np
a = np.array([[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,2,3,4,5,6,0,0],
[0,1,4,5,6,7,8,0,0],
[0,1,4,5,6,7,8,0,0]])
r = np.nonzero(np.any(a != 0, axis=0))[0]
>>> r
[1 2 3 4 5 6]
De quel type de structure de données s'agit-il?
Matrice avec colonnes C1, C2, C3, C4, C5, C6
@RayyanKhan Quel genre de matrice? Pandas DF, tableau NumPy, liste de listes Python ... etc.
@ Tomothy32, j'ai un tableau NumPy au format n * n