TipoError: 'Series' objeto no soporta la asignación de elementos mientras que el parámetro de referencia Dask vs Pandas
después de dos análisis de sentimientos, necesito hacer una comparación Dasklib vs Pandas de una manera de referencia. Aunque lo tenía hasta que me encontré con el objeto TipoError: "Series" no apoya la asignación de artículos.
Este es mi código:
# %%
import sys
sys.path.append('/Users/rokayadarai/Desktop/Coding/DataSets')
# %%
# Mongo DB init
import pymongo
from pymongo import MongoClient
client = pymongo.MongoClient("mongodb://localhost", 27017)
db = client['Hotel_Test']
collection = db['collection']
# %%
# DASK
import dask.dataframe as ddf
def run_dask():
#read data
df_dask = ddf.read_csv('/Users/rokayadarai/Desktop/Coding/DataSets/Hotel_Reviews.csv')
df_dask = df_dask.dropna()
df_dask = df_dask.sample(frac = 0.05)
#devide dataset into negative and positive sets and assign correct boolean rating
negative = df_dask['Negative_Review']
positive = df_dask['Positive_Review']
#additional cleaning
negative = negative.drop_duplicates()
positive = positive.drop_duplicates()
negative = negative.to_frame()
positive = positive.to_frame()
cleaned_negative_reviews = negative['Negative_Review']
cleaned_positive_reviews = positive['Positive_Review']
cleaned_negative_reviews['rating'] = 0
cleaned_positive_reviews['rating'] = 1
#write negative and positive reviews to csv files
cleaned_negative_reviews.to.csv('/Users/rokayadarai/Desktop/Coding/DataSets/dask_negative_reviews.csv')
cleaned_positive_reviews.to.csv('/Users/rokayadarai/Desktop/Coding/DataSets/dask_positive_reviews.csv')
print('Dask done')
# %%
# PANDAS
import pandas as pd
def run_pandas():
#read data
df = pd.read_csv('/Users/rokayadarai/Desktop/Coding/DataSets/Hotel_Reviews.csv')
df = df.dropna()
df = df.sample(frac=0.05)
#devide dataset into negative and positive sets and assign correct boolean rating
negative = pd.DataFrame(df['Negative_Review'])
positive = pd.DataFrame(df['Positive_Review'])
#additional cleaning
reviews_negative = negative[negative["review"] != "No Negative"]
reviews_positive = positive[positive["review"] != "No Positive"]
cleaned_negative_reviews = reviews_negative['review']
cleaned_positive_reviews = reviews_positive['review']
cleaned_negative_reviews['rating'] = 0
cleaned_positive_reviews['rating'] = 1
#write negative and positive reviews to csv files
cleaned_negative_reviews.to.csv('/Users/rokayadarai/Desktop/Coding/DataSets/pandas_negative_reviews.csv')
cleaned_positive_reviews.to.csv('/Users/rokayadarai/Desktop/Coding/DataSets/pandas_positive_reviews.csv')
print('Pandas done')
# %%
# denfine benchmark
import time
def benchmark(function, function_name):
start = time.time()
function()
end = time.time()
print('{0} seconds for {1}'.format((end - start), function_name))
# %%
benchmark(run_dask, 'dataframe dask')
benchmark(run_pandas, 'dataframe pandas')
# %%
y este es el error Traceback:
benchmark(run_dask, 'dataframe dask')...
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~/Desktop/Coding/py /DASK_vs_PANDAS.py in
----> 87 benchmark(run_dask, 'dataframe dask')
88 benchmark(run_pandas, 'dataframe pandas')
~/Desktop/Coding/py /DASK_vs_PANDAS.py in benchmark(function, function_name)
4 def benchmark(function, function_name):
5 start = time.time()
----> 6 function()
7 end = time.time()
8 print('{0} seconds for {1}'.format((end - start), function_name))
~/Desktop/Coding/py /DASK_vs_PANDAS.py in run_dask()
36 cleaned_positive_reviews = positive['Positive_Review']
37
---> 38 cleaned_negative_reviews['rating'] = 0
39 cleaned_positive_reviews['rating'] = 1
40
TypeError: 'Series' object does not support item assignment
El error ocurre tan pronto como ejecuto la última celda. ¿Podría alguien decirme por favor lo que estoy haciendo mal?
Pregunta hecha hace 3 años, 4 meses, 27 días - Por codergeek24
3 Respuestas:
-
por el atardecer que querrías hacer
cleaned_negative_reviews = cleaned_negative_reviews.assign(rating = 0) cleaned_positive_reviews = cleaned_positive_reviews.assign(rating = 1)
https://docs.dask.org/en/latest/dataframe-api.html#dask.dataframe.DataFrame.assign tiene la documentación.
Respondida el Dec 18, 2020 a las 03:23 - por quantumquill
Votos positivos: 0 | Votos negativos: 0 -
El error que estás viendo ocurre porque estás tratando de asignar un valor a un elemento dentro de una Serie en Pandas, lo cual no es posible ya que las Series son inmutables. Para corregir este error, puedes modificar tu código de la siguiente manera:
En la función
run_pandas
, en lugar de intentar asignar el valor '0' y '1' directamente a las Seriescleaned_negative_reviews
ycleaned_positive_reviews
, puedes crear una nueva columna llamada 'rating' en cada DataFrame y asignar allí los valores. Aquí tienes cómo puedes hacerlo:python cleaned_negative_reviews['rating'] = 0 cleaned_positive_reviews['rating'] = 1
debería ser reemplazado por:
python reviews_negative['rating'] = 0 reviews_positive['rating'] = 1
Además, asegúrate de realizar la escritura al archivo CSV con el método correcto
to_csv()
en lugar deto.csv()
. El método correcto esto_csv()
.Después de realizar estos cambios, tu código debería funcionar correctamente sin el error de asignación en las Series de Pandas.
Respondida el Dec 19, 2020 a las 03:22 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El error se produce porque estás intentando asignar un valor a una serie de Dask, que es inmutable. Para solucionar este problema, debes convertir la serie a un marco de datos y luego asignar el valor.
Aquí tienes el código corregido:
python
%%
DASK
import dask.dataframe as ddf def run_dask():read data
df_dask = ddf.read_csv('/Users/rokayadarai/Desktop/Coding/DataSets/Hotel_Reviews.csv') df_dask = df_dask.dropna() df_dask = df_dask.sample(frac = 0.05)devide dataset into negative and positive sets and assign correct boolean rating negative = df_dask['Negative_Review'] positive = df_dask['Positive_Review']additional cleaning negative = negative.drop_duplicates() positive = positive.drop_duplicates() negative = negative.to_frame() positive = positive.to_frame() cleaned_negative_reviews = negative['Negative_Review'] cleaned_positive_reviews = positive['Positive_Review']convert series to dataframe cleaned_negative_reviews = cleaned_negative_reviews.to_frame() cleaned_positive_reviews = cleaned_positive_reviews.to_frame() cleaned_negative_reviews['rating'] = 0 cleaned_positive_reviews['rating'] = 1write negative and positive reviews to csv files
cleaned_negative_reviews.to.csv('/Users/rokayadarai/Desktop/Coding/DataSets/dask_negative_reviews.csv') cleaned_positive_reviews.to.csv('/Users/rokayadarai/Desktop/Coding/DataSets/dask_positive_reviews.csv') print('Dask done')%%
Respondida el Dec 19, 2020 a las 03:33 - por Gemini
Votos positivos: 0 | Votos negativos: 0