Je suis sûr qu'il doit y avoir un correctif pour cela, mais je ne trouve pas de réponse avec une bonne explication. Je cherche à itérer sur un dataframe et à construire un tableau croisé pour chaque paire de colonnes avec des pandas. J'ai sous-échantillonné 2 cols à partir des données d'origine et supprimé les lignes avec des données inappropriées. Avec les données restantes, je cherche à faire un tableau croisé pour finalement construire un tableau de contingence pour faire un test ChiX. Voici mon code:ValueError lors de l'utilisation du tableau croisé des pandas
my_data = pd.read_csv(DATA_MATRIX, index_col=0) #GET DATA
AM = pd.DataFrame(columns=my_data.columns, index = my_data.columns) #INITIATE DF TO HOLD ChiX-result
for c1 in my_data.columns:
for c2 in my_data.columns:
sample_df = pd.DataFrame(my_data, columns=[c1,c2]) #make df to do ChiX on
sample_df = sample_df[(sample_df[c1] != 0.5) | (sample_df[c2] != 0.5)].dropna() # remove unsuitable rows
contingency = pd.crosstab(sample_df[c1], sample_df[c2]) ##This doesn't work?
# DO ChiX AND STORE P-VALUE IN 'AM': CODE STILL TO WRITE
La trame de données contient les valeurs 0.0, 0.5, 1.0. Le '0.5' étant des données manquantes, j'enlève ces lignes avant de créer le tableau de contingence, les valeurs restantes dont je souhaite que les tables de contingence proviennent sont toutes 0.0 ou 1.0. J'ai vérifié au code travaille jusqu'à ce point. L'erreur imprimée à la console est:
ValueError: If using all scalar values, you must pass an index
Si quelqu'un peut expliquer pourquoi cela ne fonctionne pas? Aider à résoudre de quelque manière que ce soit? Ou encore mieux de fournir une alternative pour faire un test ChiX sur les colonnes alors ce serait très utile, merci d'avance!
EDIT: exemple de la structure des premières rangées de sample_df
col1 col2
sample1 1 1
sample2 1 1
sample3 0 0
sample4 0 0
sample5 0 0
sample6 0 0
sample7 0 0
sample8 0 0
sample9 0 0
sample10 0 0
sample11 0 0
sample12 1 1
Bien sûr, il existe une solution rapide. Pourquoi ne pas nous montrer vos données? –
C'est fondamentalement un dataframe avec 2 colonnes et environ 100 lignes et toutes les valeurs sont 1 ou 0. La dataframe originale 'my_data' est d'où provient sample_df et son similaire sauf avec ~ 3000 colonnes et a des lignes supplémentaires avec la valeur ' 0,5 ', qui ont été supprimés dans sample_df – user3062260
Qu'est-ce qu'un échantillon? –