python - 将 DataFrame 对象转换为字符串或对齐 DataFrame 编码

标签 python python-3.x pandas dataframe text

我正在尝试将数据框文本列拆分为每个单独的单词以进行分析。首先,我可以使用 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 对象 的工作脚本)?

我在这里缺少什么?

如果您也需要更多信息,请告诉我

编辑

我添加了以下测试

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 对象。

最佳答案

我经历了类似的事情,我无法解码我的数据,因为我的数据集中有一个无效字符。找到存在无效字符的行后,我能够在与数据交互之前将其删除。

您是否尝试过将数据子集上的句子拆分为单词?

例如:

data.iloc[0]['LDTEXT'].str.strip().str.split('[\W_]+')

你能找到有效的行吗?如果是这样,您能找到具体不起作用的行吗?对于不起作用的行,“LDTEXT”列中的数据是什么样的?

您可以使用类似以下内容来识别数据中第一个有问题的行:

for (i, row) in data.iterrows():
    try:
       row['LDTEXT'].str.strip().str.split('[\W_]+') 
    except UnicodeDecodeError:
        print(i)
        print(row['LDTEXT'])
        break

关于python - 将 DataFrame 对象转换为字符串或对齐 DataFrame 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58738364/

相关文章:

python - Pandas - 将前导 "0"添加到字符串值,以便所有值都等于 len

python - 从宽到长,但我想使用前缀而不是后缀

python - 如何在 python 中解析 HTTP 请求(自定义 Web 服务器)

python - Nuke 访问错误的 Python 版本

python - 如何在python unittest中永久模拟函数的返回值

python - 从列表列表创建字典。如果键存在,则将项目附加到字典值

python - 如何使用 pywintypes.Unicode()?

接收字符串的 Python 函数,返回字符串 + "!"

windows - 宏碁显示器序列号

python-3.x - 如何通过替换 pandas 中的 for 循环来减少程序执行时间