使用Python中的Pandas库进行语料处理(词频统计、清洗数据、选取满足条件的对应行写入文件等)

这段代码主要处理印地语数据,包括读取CSV文件,统计词频,去除特殊符号,进行字符统计,并根据特定条件筛选数据。同时,它展示了如何使用正则表达式、进度条和分块读取大文件。最后,将处理后的数据按类别写入不同的CSV文件。
摘要由CSDN通过智能技术生成
import pandas as pd
import numpy as np
import json,math
import random
from tqdm import tqdm
from collections import Counter ,defaultdict
import re,nltk
import re
import pandas as pd
import csv
df=pd.read_csv("导出印地语数据1000条.csv")
df.title

在这里插入图片描述

df

在这里插入图片描述

df.columns

在这里插入图片描述

for x in range(32,128):
    print(f'{chr(x)}{ord(chr(x))}',end=' ')
<!-- #     print(f'{chr(x)}:{ord(chr(x))}') -->
    print()
<!-- #     print(hex(int.from_bytes(chr(x).encode('utf-8'),byteorder='big'))) -->
//统计词频
cnt_word=Counter()
for x in tqdm(df['body']):
    cnt_word.update(x.split(' '))
cnt_word.most_common()

在这里插入图片描述

#词统计
cnt_word=Counter()
for x in tqdm(df['body']):
    cnt_word.update(x.split(' '))
cnt_word.most_common()
print(len(cnt_word))

在这里插入图片描述
去除特殊符号

def sub_specialspecial1(s):
#pattern1=re.compile('[\u20-\uc3a8]')
    pattern1=re.compile('[\x8b-\xbd]')
    pattern2=re.compile('[\u2002-\uffff]')
    pattern3=re.compile(r'🇷🇺🌟🌸🎀🎥🏆👉💜💪😉😍🙃🙌🙏🦄')
    
#s=pattern3.sub(' ',pattern2.sub(' ',pattern1.sub(' ',pattern4.sub('',s))))
    s=pattern3.sub(' ',pattern2.sub(' ',pattern1.sub(' ',s)))
    s=re.sub(r'([\u0021-\u0040]|[\u007b-\u007e])',r' \1 ',s)
    s=re.sub('( ){2,}|\t|\n',' ',s)
    s=re.sub('( ){2,}|\t|\n',' ',s)
    return s
df['body']= df['body'].apply(sub_specialspecial1)
## 字符统计
cot=Counter()
for x in tqdm(df['body']):
    for s in x:
        cot.update(s)
# print(sorted(cot.keys()))
# print(cot)
dd=sorted(cot.keys())
dd
# type(dd)#list
# for x in dd:
#     print(type(x))#str
    
# cot.most_common()
for x in dd:
    print(f'{x}{ord(x)}',end=' ')
    print(hex(int.from_bytes(x.encode('utf-8'),byteorder='big')))
#     印地语字符utf-8编码值范围:2305(0xe0a481)-2415(0xe0a5af)
a='a'
# test='a'
# test.decode('utf-8')
print(a.encode('utf-8'))

decode与encode问题:python中的encode()和decode()函数

import sys
sys.getdefaultencoding()
ord('a')#返回字符对应的Unicode编码值
chr(2409)#返回number对应的字符

在这里插入图片描述

s=' !"#$%&\'()*+,-./:;<=>?@[\\]中文^_`da da k;'
re.sub(r'([\u0021-\u0040]|[\u007b-\u007e])',r' \1 ',s) 

在这里插入图片描述

df_all=pd.read_csv("导出印地语数据.csv",chunksize=10000)

chunksize分块读取,用于大文件的读取
数据处理:1 用pandas处理大型csv文件 2 使用Pandas分块处理大文件 3 分块读取

df_all.title

在这里插入图片描述

dic={}
for i in tqdm(df_all["category2"]):#统计标签种类及各标签个数
    if i in dic:
        dic[i]+=1
    else:
        dic[i]=1

cnt=0
for i in dic:
    if dic[i]>5:
        cnt+=1
        print(i,dic[i])
print(cnt)
        
# print(len(dic))#标签种类个数
# # print(dic)
# dic

在这里插入图片描述

使用tqdm()可以显示进度条

将category2列中满足条件的数据的对应行,若该行body列数据满足64<=词数<=1024则加入DataFrame类型的df_test_1中,用于后面写入csv文件

#将category2列中满足条件的数据的对应行,若该行body列数据满足64<=词数<=1024则加入DataFrame类型的df_test_1中,用于后面写入csv文件
cnt_word=0
df_test_1=pd.DataFrame()
cnt=0
for index,row in tqdm(df_all.iterrows()):
    cnt+=1
    if row["category2"] == "राजनीति" or row["category2"] == "पॉलिटिकल खबर":
        for e in row['body']:
            if(e==" "):
                cnt_word+=1
        print(cnt_word)
        if cnt_word>=64 and cnt_word<=1024:
            df_test_1[cnt]=row
        cnt_word=0

在这里插入图片描述
转置后即为想要的格式

df_test_1.T

在这里插入图片描述
查看body列每个元素的词数

cnt_word=0
for i in df_test_1.T['body']:
    for e in i:
        if(e==" "):
            cnt_word+=1
    print(cnt_word)
    cnt_word=0
#     print("______")

写入“政治类.csv”文件

df_test_1.T.to_csv("政治类.csv")
df_test1=pd.read_csv("政治类.csv")
df_test1

在这里插入图片描述
(929 rows × 9 columns)

cnt_word=0
for i in df_test1['body']:
    for e in i:
        if(e==" "):
            cnt_word+=1
    print(cnt_word)
    cnt_word=0
#     print("______")

其他类别同样方法处理

# संस्कृति文化类
df_test_2=pd.DataFrame()
cnt=0
for index,row in tqdm(df_all.iterrows()):
    cnt+=1
    if row["category2"] == "संस्कृति":
        print(index)
        print(type(row))
#         row.to_csv("")
        df_test_2[cnt]=row
df_test_2.T.to_csv("文化类.csv")
df_test2=pd.read_csv("文化类.csv")
df_test2

(130 rows × 9 columns)

cnt_word=0
for i in df_test2['body']:
    for e in i:
        if(e==" "):
            cnt_word+=1
    print(cnt_word)
    cnt_word=0
    print("______")
# पर्यावरण环境类
df_test_3=pd.DataFrame()
cnt=0
for index,row in tqdm(df_all.iterrows()):
    cnt+=1
    if row["category2"] == "पर्यावरण":
        print(index)
        print(type(row))
#         row.to_csv("")
        df_test_3[cnt]=row
df_test_3.T.to_csv("环境类.csv")
df_test3=pd.read_csv("环境类.csv")
df_test3

(22 rows × 9 columns)

cnt_word=0
for i in df_test3['body']:
    for e in i:
        if(e==" "):
            cnt_word+=1
    print(cnt_word)
    cnt_word=0
    print("______")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GCTTTTTT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值