我正在尝试将文本的数据框列拆分为每个单独的词以进行分析。首先,我可以使用CSV文件中的一个小型数据集来完成此操作。工作代码如下:
data = pd.read_csv('PLUSCA.csv',encoding='utf8')
#print(data)
print(data['DESCRIPTION'])
# Data type is object
data['words'] = data['DESCRIPTION'].str.strip().str.split('[\W_]+')
# Clean Data
dataClean = data[['SITEID','DESCRIPTION','words']].copy()
print(dataClean['words'])
现在,当我尝试通过SQL查询(不具有encoding='utf-8'
的选项)提取更大的数据集时,就会出现问题。
SQLquery = pd.read_sql_query("""long working query""",conn)
data = pd.DataFrame(SQLquery)
print(data.head())
print(data['LDTEXT'])
# Create word array
print(data['LDTEXT'])
#returns correct text
print(data['LDTEXT'].dtype)
#returns object - same as working code
data['words'] = data['LDTEXT'].str.strip().str.split('[\W_]+')
我尝试了几种不同的方法,包括但不限于:
data['LDTEXT'] = data['LDTEXT'].astype(str)
data['words'] = data['LDTEXT'].apply(str).str.strip().str.split('[\W_]+')
data['words'] = data[u'LDTEXT'].series.str.strip().str.split('[\W_]+')
#doesnt exist but tried
data = pd.DataFrame(SQLquery,encodeing'utf-8')
我不断收到以下错误之一:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 172: character maps to <undefined>
SystemError: decoding with 'WINDOWS-1252' codec failed (SystemError: <built-in function charmap_decode> returned a result with an error set)
AttributeError: Can only use .str accessor with string values!
还有一些明显的东西,例如:
TypeError: __init__() got an unexpected keyword argument 'encoding'
两个数据集之间的唯一区别是不起作用,这是因为文本大得多,并且是从SQL(而不是CSV)导入的。另外,我尝试了一些astype('|S')
来处理大字符串。仍然没有运气。我觉得这是一个编码问题。如何检查数据的编码并为SQL导入更改它?数据的大小重要吗?大字节字符串的处理方式不同吗?有效的数据集文本每个可能只有1-2个句子,其中较大的集合最多可以是每行几个段落。
或如何将其正确转换为字符串(我想避免使用该字符串,因为我知道我的dtype object
脚本可以正常工作)?
我在这里想念什么?
让我知道您是否也需要更多信息
编辑
我添加了以下测试
for i,row in enumerate(data['LDTEXT']):
#print("#################### NEW ROW ######################")
#print(row)
print(i)
text = row.read()
#print(text)
try:
print("TESTING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
text.strip().split('[\W_]+')
print(text)
except UnicodeDecodeError:
print(text)
break
似乎Oracle创建cx_Oracle.LOB对象而不是常规的python对象。