# 10 读取 Excel 文件|指定标题读取当前目录下 某招聘网站数据.csv 文件的 positionId、positionName、salary 列,并将标题设置为 ID、岗位名称、薪资
时间: 2023-06-25 09:05:39 浏览: 168
以下是 Python 代码,可以实现读取当前目录下某招聘网站数据.csv文件的positionId、positionName、salary列,并将标题设置为ID、岗位名称、薪资:
```python
import pandas as pd
import os
# 获取当前工作路径
current_path = os.getcwd()
# 拼接要读取的文件路径
file_path = os.path.join(current_path, "某招聘网站数据.csv")
# 读取 csv 文件,指定要读取的列和标题
df = pd.read_csv(file_path, usecols=["positionId", "positionName", "salary"], names=["ID", "岗位名称", "薪资"])
# 打印读取的数据
print(df)
```
其中,`os.getcwd()`可以获取当前工作路径,`os.path.join()`可以将路径拼接起来,`pd.read_csv()`中的`usecols`参数可以指定要读取的列,`names`参数可以指定要设置的标题。最后,用`print()`打印读取的数据即可。
相关问题
# 8 读取 Excel 文件|指定列(匹配)根据指定列名匹配读取让我们来个更难一点的,还是读取 某招聘网站数据.csv 文件,但现在有一个 list 中包含多个字段👇 # usecols = ['positionId','test','positionName', 'test1','salary']如果 usecols 中的列名存在于 某招聘网站数据.csv 中,则读取
可以使用 pandas 库中的 read_csv 方法来读取 csv 文件,同时指定 usecols 参数来选择需要的列。可以使用 set() 函数将需要的列名放入一个集合中,然后遍历集合,判断列名是否存在于 csv 文件中,如果存在,则将该列读取出来。
以下是示例代码:
```python
import pandas as pd
# 读取 csv 文件
df = pd.read_csv('某招聘网站数据.csv', encoding='utf-8')
# 需要读取的列名列表
col_list = ['positionId', 'test', 'positionName', 'test1', 'salary']
# 列名集合
col_set = set(col_list)
# 读取数据
result = {}
for col in col_set:
if col in df.columns: # 判断是否存在该列
result[col] = df[col].tolist() # 读取该列数据
print(result)
```
输出结果为一个字典,字典中的键为需要读取的列名,值为该列的数据列表。
优化代码import pandas as pd import matplotlib.pyplot as plt import re info=pd.read_csv('information3.csv',header=None) colNames=['positionName','minimumWage','maximumWage','exp', 'educationalRequirements','工作地址','工作城市', '公司名称','行业','人员规模','企业性质' ] info.columns=colNames info['minimumWage'] aa=info.loc[:,['minimumWage','maximumWage']] info['薪资']=aa.mean(axis=1) info['薪资']=info.loc[:,['minimumWage','maximumWage']].mean(axis=1) info['人员规模'] ren=info['人员规模'] renstr=info['人员规模'].str print(type(ren)) print(type(renstr)) mid=info['人员规模'].str.findall('\d+') print(type(mid)) mid[0] map(float,mid[0]) renzho=list(map(float,mid[0])) sum(renzho)/len(renzho) sum(list(map(float,mid[0])))/len(list(map(float,mid[0]))) personScope=mid.apply(lambda x:sum(list(map(float,x)))/len(list(map(float,x)))) info['人员规模']=personScope.astype('str')21:12# 招聘要求学历分析 a = info[4].value_counts() plt.rcParams['font.sans-serif'] = 'SimHei' # 设置绘图字体 plt.subplots_adjust(bottom=0.15) # 设置图形的底边距 plt.bar(a.index, a) # 绘制条形图 plt.xticks(rotation=45) # 坐标刻度旋转 plt.title('学历要求分布') plt.show() #招聘公司性质分析 b = info[9].value_counts() plt.rcParams['font.sans-serif'] = 'SimHei' # 设置绘图字体 plt.subplots_adjust(bottom=0.15) # 设置图形的底边距 plt.bar(b.index, b) # 绘制条形图 plt.xticks(rotation=45) # 坐标刻度旋转 plt.title('企业性质分布') plt.show()
可以尝试进行以下优化:
1. 使用适当的数据类型:在读取csv文件时,可以指定列的数据类型,如int、float等,这样可以提高代码的执行效率。
2. 尽可能使用向量化操作:在计算薪资和人员规模时,可以直接使用pandas的向量化操作,而不需要使用apply函数,这样可以提高代码的执行效率。
3. 避免重复代码:在绘制条形图时,可以将相同的代码封装成函数,避免重复写相同的代码。
优化后的代码如下:
```
import pandas as pd
import matplotlib.pyplot as plt
import re
# 读取csv文件,并指定列的数据类型
info=pd.read_csv('information3.csv',header=None, dtype={1: float, 2: float})
# 指定列名
colNames=['positionName','minimumWage','maximumWage','exp', 'educationalRequirements','工作地址','工作城市', '公司名称','行业','人员规模','企业性质' ]
info.columns=colNames
# 计算薪资和人员规模
info['薪资'] = info[['minimumWage','maximumWage']].mean(axis=1)
info['人员规模'] = info['人员规模'].str.findall('\d+').apply(lambda x: sum(map(float,x))/len(x)).astype(str)
# 绘制条形图的函数
def plot_bar(data, title):
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.subplots_adjust(bottom=0.15)
plt.bar(data.index, data)
plt.xticks(rotation=45)
plt.title(title)
plt.show()
# 招聘要求学历分析
a = info['educationalRequirements'].value_counts()
plot_bar(a, '学历要求分布')
# 招聘公司性质分析
b = info['企业性质'].value_counts()
plot_bar(b, '企业性质分布')
```
阅读全文