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 Series cleaned_negative_reviews y cleaned_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 de to.csv(). El método correcto es to_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'] = 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')

    %%

    Respondida el Dec 19, 2020 a las 03:33 - por Gemini

    Votos positivos: 0 | Votos negativos: 0