安装pandas库
pip install pandas
pandas库操作文件
已知在本地桌面有一名为Python开发岗位的csv文件(如果是excel文件可以做简单修改即可,道理是通用的)
打开文件:
打开文件并查看文件内容
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data
运行结果如下:
encoding的作用是为了在文本处理或文件操作中使用的字符编码设置。
保存csv文件
data.to_csv("D:\desk\Python开发岗位1.csv",encoding = "ANSI")
#data是你所要保存的变量名,encoding为了防止乱码
#此方法会保存序列,如果不想保存序列则才有下列保存方式
data.to_csv("D:\desk\Python开发岗位1.csv",encoding = "ANSI",index=False)
缺失值处理:
1)dropna()删除数据中值为空的所在行
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data = data_csv.dropna()
data
运行结果如下:
2)fillna()用其他值代替空值(我一般采用?代替)
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data = data_csv.fillna('?')
data
运行结果如下:
3)用前一个数据代替fillna(method='pad')
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data = data_csv.fillna(method='pad')
data
运行结果如下:(会出现的情况是当缺失值是第一位时,前方无数据可以用来填充)
4)用后一个数据代替fillna(method=bfill)
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data = data_csv.fillna(method="bfill")
data
运行结果如下:(会出现的情况是当缺失值是最后一位时,后方无数据可以用来填充)
5)用平均值来代替空值fillna(mean())
(我自己觉得这种方法适用于例如成绩表,因为mean取平均值要是int类型的数据,所以下面就不进行演示)
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data_csv.fillna(data_csv.mean())
重复值处理
做法是通过duplicated()查看是否有重复值,如果有则通过电容屏_duplicates()方法进行删除
数据处理
这里要做的是将薪资拆分成最低薪资和最高薪资,并用最低薪资进行排序
首先采用正则表达式将x-x千/月中的千/月利用替换成空值进行删除
import re
salary_str = "5千/月-10千/月"
parts = re.sub(r'千/月', '', salary_str).split('-')
parts
再用split函数进行切割
split
是字符串对象的一个方法,用于将字符串分割成一个列表。'-'
是分割符,意味着split
方法会在每个-
字符处将字符串分割成多个部分。
而排序则使用sort_values(by='你想以哪一列为依据')注意:sort默认排序是从小到大升序
from pandas import DataFrame
import pandas as pd
import re
data_csv = pd.read_csv("D:\desk\Python开发岗位2.csv",encoding = "ANSI")
salary_column = '薪资' # 根据您的CSV文件实际情况修改列名
# 使用正则表达式替换'千/月'为空字符串
# 假设薪资的格式是'数字-数字千/月'
def parse_salary(salary_str):
# 移除'千/月'并分割字符串
parts = re.sub(r'千/月', '', salary_str).split('-')
if len(parts) == 2:
# 将字符串转换为整数并乘以1000(因为'千'等于1000)
min_salary = float (parts[0]) * 1000
max_salary = float (parts[1]) * 1000
return min_salary, max_salary
else:
# 如果格式不正确,返回NaN
return None, None
data_csv[['最低薪资', '最高薪资']] = pd.DataFrame(data_csv[salary_column].apply(parse_salary).tolist(), index=data_csv.index)
data = data_csv
data1=data.sort_values(by='最低薪资')
日期处理
当一个文件中日期格式不统一可能存在2023/1/8、20231021、10072022等情况
date_column = '发布日期'
# 定义一个函数来解析不同格式的日期字符串
def parse_date(date_str):
# 尝试不同的日期格式
#将所有出现的可能都罗列出来
formats = ['%Y%m%d','%d%m%Y','%Y/%m/%d','%m/%d/%Y']
for fmt in formats:
try:
return pd.to_datetime(date_str, format=fmt)
except ValueError:
# 如果当前格式解析失败,则继续尝试下一个格式
continue
# 如果所有格式都解析失败,则返回原始字符串或None
return None # 或者返回 date_str
# 应用parse_date函数到发布日期列
data_csv[date_column] = data_csv[date_column].apply(parse_date)
以上只列举了四种情况,可根据自己的实际情况进行增加或删减
对于Python本人也只是初学,欢迎各位学者一起讨论一起学习,如果文章中有错误之处还请指正!