Невозможно преобразовать объект в строку

#python #pandas

#python #pandas

Вопрос:

При попытке преобразовать столбец в Python 3 из объекта в строку код, который я использую, не выдает ошибки, но он также не изменяет тип.

 import pandas as pd
import numpy as np
import nltk
import os
import nltk
nltk.download('punkt')
import nltk.corpus
import re

#Read in fields
jan = pd.read_excel(r'C:UsersSabrinaJIRA20192019_jan.xls')

#Indicate columns for performing tokenization
jan_a = pd.DataFrame(jan, columns= ['Summary'])

#Tokenize columns for text analysis
jan_a['Summary'] = jan_a.apply(lambda column: 
    nltk.word_tokenize(column['Summary']), axis=1)
print(jan_a)
print(jan_a['Summary'].dtypes)

#Convert list to string
jan_a['Summary'].astype('str')
print(jan_a['Summary'].dtypes)
 

Вывод для обоих dtypes — object, любая помощь будет оценена!

Комментарии:

1. Я не уверен, но я думаю, что astype возвращает его как заданный тип, а не изменяет его на месте

Ответ №1:

Попробуйте изменить:

 jan_a['Summary'].astype('str') 
 

Для

 jan_a['Summary'] = jan_a['Summary'].astype('string')
 

Комментарии:

1. К сожалению, тот же результат

Ответ №2:

Поведение по умолчанию заключается в обработке python str как object по умолчанию

 >>> import pandas as pd
>>> df = pd.DataFrame(["aa1 bb2 cc3".split(),"aa4 bb5 cc6".split()],columns="col1 col2 col3".split())
>>> 
>>> df
  col1 col2 col3
0  aa1  bb2  cc3
1  aa4  bb5  cc6
>>> df["col1"]
0    aa1
1    aa4
Name: col1, dtype: object
>>> 
 

вам нужно явно указать, что вы хотите string либо при создании, добавив dtype="string"

 >>> df2 = pd.DataFrame(["aa1 bb2 cc3".split(),"aa4 bb5 cc6".split()],dtype="string",columns="col1 col2 col3".split())
>>> df2
  col1 col2 col3
0  aa1  bb2  cc3
1  aa4  bb5  cc6
>>> df2["col1"]
0    aa1
1    aa4
Name: col1, dtype: string
>>> 
 

или путем последующего преобразования его с помощью astype

 >>> df["col1"].astype("string")
0    aa1
1    aa4
Name: col1, dtype: string
>>> 
 

ссылка на соответствующую часть документации для получения более подробной информации: https://pandas.pydata.org/docs/user_guide/text.html#text-types

Комментарии:

1. Когда вы говорите по умолчанию, означает ли это, что я не могу преобразовать его как есть?

2. нет, по умолчанию, по-видимому, если не указано явно, обрабатывайте его как обычный объект python, следовательно, object , необходимо указать, что вы будете работать со строкой, как указано в документации, добавив dtype="string" , как в последнем обновлении моего примера

3. Хорошо, понял, я внес следующие изменения pd.Series(jan_a[‘Summary’]) pd.Series(jan_a[‘Summary’]).astype(«строка») И консоль показывает: 169 «»»Подтвердите, что мы храним только NA или строки.»»» 170 если len(self._ndarray), а не lib.is_string_array(self._ndarray, skipna=True): —> 171 повысьте значение ошибки («Для stringArray требуется последовательность строк или pandas.NA») 172 если self._ndarray.dtype != «object»: 173 вызывает ошибку ValueError( ошибка ValueError: stringArray требует последовательности строк или pandas.NA

4. Я сделал еще одно обновление, чтобы попытаться объяснить это лучше… теперь похоже, что вы получаете и ошибка, я не эксперт pandas, поэтому я не уверен, смогу ли я сделать больше без рабочего примера