【发布时间】:2019-11-06 20:57:50
【问题描述】:
我正在尝试将数据框的文本列拆分为每个单独的单词以进行分析。对于初学者,我可以使用 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 对象。
【问题讨论】:
标签: python python-3.x pandas dataframe text