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

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

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

//统计词频
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("______")

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5658266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存