零碎Python代码整理

Pycharm设置Conda环境

https://www.jetbrains.com/help/pycharm/conda-support-creating-conda-virtual-environment.html

Excel表合并

import pandas as pd
import os
path = "路径"
file_list = os.listdir(path)
all_data = pd.DataFrame()
for files in file_list:
    try:
        file = pd.read_excel(path + '/' + files, header=0, usecols=["公司名称", "关联公司名称", "工作地点", "发布时间"])
        print('目前在:', files)
        all_data = pd.concat([all_data, file])
    except Exception as e:
        print(files, "无法打开")
all_data.to_csv("路径")

模糊合并

file_zp['firmname_备'] = file_zp['firmname_备'].apply(lambda x: (difflib.get_close_matches(x, file_gs['firmname'])[:1] or [None])[0])

Df.apply() 与 Series.apply():

  • 两者的参数设置是不一样的,Df.apply()可以设定result=(),Series.apply()则不行

手动安装python第三方包的办法

1.从 https://pypi.org/simple/ 下载压缩文件
2.解压缩后在文件夹内打开cmd,运行 python setup.py install
3.如果压缩包内没有setup.py文件,可以创建一个同名文件,内容为:

from setuptools import setup
setup()

再次运行 python setup.py install即可

pip换源

pip3 install pkname -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

利用jieba和thefuzz合并

import pandas as pd
import jieba
from thefuzz import fuzz

# 创建一个包含文本的DataFrame
df = pd.DataFrame({'text': ['我喜欢吃苹果', '他喜欢吃橙子', '她喜欢吃香蕉']})

# 定义一个函数用于分词
def cut_text(text):
    seg_list = jieba.cut(text)
    return " ".join(seg_list)

# 将分词函数应用到DataFrame的每一行
df['text_cut'] = df['text'].apply(cut_text)

# 定义一个模糊匹配函数
def fuzzy_merge(x, choices, scorer, limit):
    return choices[scorer(x, choices, limit=limit).argmax()]

# 创建一个选择列表
choices = ['苹果', '橙子', '香蕉']

# 将分词结果应用到模糊匹配函数,进行合并
df['fruit'] = df['text_cut'].apply(fuzzy_merge, args=(choices, fuzz.token_sort_ratio, 60))

# 输出结果
print(df)

分词与统计

import pandas as pd
import jieba
from collections import Counter

# 创建一个包含文本的DataFrame
df = pd.DataFrame({'text': ['我喜欢吃苹果,也喜欢吃香蕉。', '他喜欢吃橙子,不喜欢吃苹果。']})

# 定义一个函数用于分词并统计词频
def word_count(text):
    seg_list = jieba.cut(text)
    word_count = Counter(seg_list)
    return word_count

# 将函数应用到DataFrame的每一行,生成新的一列
df['word_count'] = df['text'].apply(word_count)

# 合并所有行的词频统计结果
word_count_all = sum(df['word_count'], Counter())

# 输出结果
print(word_count_all)

jieba和thefuzz模糊合并

  • thefuzz中的process.extractOne()中query参数必须是字符类型的,因此形如["xxx", "aaa"]这样的list不能直接传入query参数。
  • 需要在jieba分词时,返回" ".join(jieba.cut(text)),即将list中的字符以空格拼接起来。
  • 这样生成的Series即可使用apply方法调用process.extractOne()函数。
def word_cut(text):
    return " ".join(jieba.lcut(text))


file_gs01["cut2"] = file_gs01["firmname_b"].apply(word_cut)
m = file_gs01["cut2"].apply(
    	lambda x: process.extractOne(
        	query=x,
        	choices=file_zp01["cut"],
        	scorer=fuzz.token_set_ratio))
  • note: extractone中需要加入score_cutoff=60,限制匹配度,其次需要用多线程优化apply
posted @ 2022-11-30 15:57  梁书源  阅读(58)  评论(0)    收藏  举报