Si vous faisiez une application qui manipule les fichiers csv à l'aide de pandas, Le résultat est édité comme prévu, J'ai été averti que SettingWithCopyWarning.
SettingWithCopyWarning Je pense que c'est un avertissement car c'est passé par référence (qu'est-ce que c'est?). Lorsqu'une partie des données d'origine est extraite → affectée à une partie de celles-ci Souhaitez-vous modifier "cette partie des données d'origine"? Vous ne savez pas si vous vouliez créer "de nouvelles données avec quelques modifications"?
N'hésitez pas à commenter dans les commentaires.
Si vous spécifiez dans copy () qu'il s'agit d'une copie et non d'une référence, SettingWithCopyWarning a été résolu.
Premier, Dans un répertoire (dossier) appelé output_files Créez un fichier csv nommé data.csv.
Le contenu est apple,8 orange,15 banana,4 apple,1 Il est devenu.
data.csv
apple,8
orange,15
banana,4
apple,1
Ce fichier csv Supprimer la pomme, 1 et Réécrit sur apple, 9
data.csv
apple,9
orange,15
banana,4
Le but est d'éditer.
check_data.py
import pandas as pd
def check():
df = pd.read_csv('output_files/data.csv', names=['fru_name', 'count'])
#Le plus souvent dans vc(Dupliquer)Conserver les fruits
vc = df['fru_name'].value_counts().index[0]
#Stocker le nombre d'occurrences en fre
fre = df['fru_name'].value_counts().iat[0]
if fre > 1:
#Supprimez la ligne de fruits en double et changez-la en variable new_Stocker dans les données
new_data = df.drop_duplicates(subset='fru_name')
#Duper le nombre original de fruits en double_Stocker en nombre
dup_count = int(new_data.loc[new_data['fru_name'] == vc, 'count'])
# dup_compter+1
dup_count += 1
new_data.loc[new_data['fru_name'] == vc, 'count'] = dup_count
#data.Écraser le csv
new_data.to_csv('output_files/data.csv', index=False, header=False)
check()
python
SettingWithCopyWarning
Le fichier csv est comme prévu
data.csv
apple,9
orange,15
banana,4
A été édité, mais SettingWithCopyWarning est émis.
Dans copy (), pour indiquer clairement qu'il s'agit d'une copie et non d'une référence
python
new_data = df.drop_duplicates(subset='fru_name')
À
python
#copy()Être explicitement une copie, pas une référence
new_data = df.drop_duplicates(subset='fru_name').copy()
changer en.
check_data2.py
import pandas as pd
def check():
df = pd.read_csv('output_files/data.csv', names=['fru_name', 'count'])
#Le plus souvent dans vc(Dupliquer)Conserver les fruits
vc = df['fru_name'].value_counts().index[0]
#Stocker le nombre d'occurrences en fre
fre = df['fru_name'].value_counts().iat[0]
if fre > 1:
#Supprimez la ligne de fruits en double et changez-la en variable new_Stocker dans les données
new_data = df.drop_duplicates(subset='fru_name').copy()
#Duper le nombre original de fruits en double_Stocker en nombre
dup_count = int(new_data.loc[new_data['fru_name'] == vc, 'count'])
# dup_compter+1
dup_count += 1
new_data.loc[new_data['fru_name'] == vc, 'count'] = dup_count
#data.Écraser le csv
new_data.to_csv('output_files/data.csv', index=False, header=False)
check()
avec ça, Sans SettingWithCopyWarning, Le fichier csv est comme prévu Il est venu pour être édité.
Recommended Posts