#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, поэтому я не уверен, смогу ли я сделать больше без рабочего примера