Pandas初级认识

深入浅出Pandas

Series - 数据系列 - 一维数据
DataFrame - 数据窗、数据框、数据表 - 二维数据
Index - 索引 - 为Series和DataFrame提供索引服务

scores = np.random.randint(60, 101, (5, 3))
scores
array([[ 62,  80,  78],
       [ 91,  71,  77],
       [ 99,  71, 100],
       [ 96,  77,  84],
       [ 73,  94,  99]])

通过二维数组构造DataFrame对象

df1 = pd.DataFrame(
    data=scores,
    columns=['Verbal', 'Math', 'English'],
    index=np.arange(1001, 1006)
)
df1
Verbal	Math	English
1001	62	80	78
1002	91	71	77
1003	99	71	100
1004	96	77	84
1005	73	94	99
data = {
    'Verbal': scores[:, 0],
    'Math': scores[:, 1],
    'English': scores[:, 2]
}
data
{'Verbal': array([62, 91, 99, 96, 73]),
 'Math': array([80, 71, 71, 77, 94]),
 'English': array([ 78,  77, 100,  84,  99])}

通过字典来创建DataFrame对象

df2 = pd.DataFrame(data=data, index=np.arange(1001, 1006))
df2
Verbal	Math	English
1001	62	80	78
1002	91	71	77
1003	99	71	100
1004	96	77	84
1005	73	94	99
import sys
​
sys.getdefaultencoding()
'utf-8'

读取CSV文件的数据创建DataFrame对象

df3 = pd.read_csv(
    '2018年北京积分落户数据.csv',
    index_col='id',  # 设置索引列(哪个列充当索引)
    # encoding='utf-8',  # 设置字符编码方式
    # usecols=['id', 'name', 'company', 'score'],  # 设置需要加载的列
    # nrows=20,  # 设置加载的行数
    # skiprows=np.arange(1, 11),  # 设置跳过的行
    # delimiter=',',  # 设置分隔符(默认是逗号)
    # sep=',',  # 设置分隔符(默认是逗号)
    # quotechar='"',  # 设置包裹字符串的字符(默认是双引号)
    # iterator=True,  # 使用迭代器模式(一次只加载一部分数据)
    # chunksize=1000,  # 每次加载的数据量
)

df3

name	birthday	company	score
id				
1	杨效丰	1972-12	北京利德华福电气技术有限公司	122.59
2	纪丰伟	1974-12	北京航天数据股份有限公司	121.25
3	王永	1974-05	品牌联盟(北京)咨询股份公司	118.96
4	杨静	1975-07	中科专利商标代理有限责任公司	118.21
5	张凯江	1974-11	北京阿里巴巴云计算技术有限公司	117.79
...	...	...	...	...
6015	孙宏波	1978-08	华为海洋网络有限公司北京科技分公司	90.75
6016	刘丽香	1976-11	福斯(上海)流体设备有限公司北京分公司	90.75
6017	周崧	1977-10	赢创德固赛(中国)投资有限公司	90.75
6018	赵妍	1979-07	澳科利耳医疗器械(北京)有限公司	90.75
6019	贺锐	1981-06	北京宝洁技术有限公司	90.75
6019 rows × 4 columns

查看编码方式

​python
import sys
sys.getdefaultencoding()
‘utf-8’

df4 = pd.read_csv(
    'bilibili.csv',
    encoding='gbk'
)

df4
title url watchnum dm uptime upname
0 阿里云大学课程(云计算、中间件、大数据、云安全) //www.bilibili.com/video/BV1Lv411s7wu?from=search 2954 4 2021/1/21 韭菜滚雪球
1 视觉传达设计专业的小朋友大学课程有哪些,强度怎么样,需要什么技能?学姐给新生的解答与建议 //www.bilibili.com/video/BV1Ea4y1a7CX?from=search 3526 8 2020/7/25 铧仔仔儿的奋斗史
2 CAP:适合高中生的大学课程(上大学之前提前学习大学的课程)同济大学《微积分CAP》 //www.bilibili.com/video/BV1X4411Y7u8?from=search 5597 17 2019/5/11 愚甘杂货铺
3 干货!论文读写系列|写作风格:例文解析(1)|人文社科|教育学|大学课程、知识 //www.bilibili.com/video/BV1VC4y1b7ZA?from=search 1.1万 29 2020/7/26 cici西西熙熙
4 《用户体验与心理-第1期》大学课程 //www.bilibili.com/video/BV1r7411M7gY?from=search 1373 9 2020/2/24 Luka老师
… … … … … … …
1902 【中国石油大学】构造地质学(第1-2章) ——主讲:李理老师 //www.bilibili.com/video/BV1Y4411x7sE?from=search 4097 5 2019/5/2 點點滴滴Super
1903 【模电】模拟电子技术基础【四】 //www.bilibili.com/video/BV1sb411v7E6?from=search 5997 11 2019/3/8 干脆的非洲鼓
1904 【模电】模拟电子技术基础【三】 //www.bilibili.com/video/BV1Rb411i7yo?from=search 4713 8 2019/3/5 干脆的非洲鼓
1905 结构化学-东北大学-王军 //www.bilibili.com/video/BV1yb411t7Mb?from=search 5835 2 2019/2/28 万万万万不能怂
1906 《结构化学》南开大学-孙宏伟 重点难点解析 //www.bilibili.com/video/BV1yt411t7UG?from=search 5287 6 2019/1/28 阿bu爱学习
1907 rows × 6 columns

读取Excel文件的数据创建DataFrame对象

# Office 2007- ---> xls ---> xlrd
# Office 2007+ ---> xlsx ---> openpyxl
# %pip install xlrd openpyxl
df5 = pd.read_excel(
    '2020年销售数据.xlsx',
    sheet_name='data',  # 需要读取的表单的名字
    # header=1,  # 表头在第几行(从0开始计数)
)

df5
销售日期 销售区域 销售渠道 销售订单 品牌 售价 销售数量
0 2020-01-01 上海 拼多多 182894-455 八匹马 99 83
1 2020-01-01 上海 抖音 205635-402 八匹马 219 29
2 2020-01-01 上海 天猫 205654-021 八匹马 169 85
3 2020-01-01 上海 天猫 205654-519 八匹马 169 14
4 2020-01-01 上海 天猫 377781-010 皮皮虾 249 61
… … … … … … … …
1940 2020-12-30 北京 京东 D89677 花花姑娘 269 26
1941 2020-12-30 福建 实体 182719-050 八匹马 79 97
1942 2020-12-31 福建 实体 G70083 花花姑娘 269 55
1943 2020-12-31 福建 抖音 211471-902/704 八匹马 59 59
1944 2020-12-31 福建 天猫 211807-050 八匹马 99 27
1945 rows × 7 columns

# 安装连接MySQL数据库需要的三方库(依赖项)
# %pip install -U pymysql cryptography
# 从数据库服务器中获取数据创建DataFrame对象
import pymysql
​
conn = pymysql.connect(host='dizi', port=3306,
                       user='niuzi', psd='mimimimi',
                       database='hrs', charset='utf8mb4')
df6 = pd.read_sql_query('select * from tb_dept', conn, index_col='dno')
df6

dname dloc
dno
10 会计部 北京
20 研发部 成都
30 销售部 重庆
40 运维部 深圳

# SQLAlchemy ---> ORM ---> Object Relational Mapping
# URL / URI ---> Universal Resource Locator / Identifier
# pymysql / mysqlclient
# %pip install -U sqlalchemy



from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://niuzi:[email protected]:3306/hrs')
engine


Engine(mysql+pymysql://niuzi:***@192.168.75.1:3306/hrs)
df7 = pd.read_sql_table('tb_dept', engine, index_col='dno')

df7

dname dloc
dno
10 会计部 北京
20 研发部 成都
30 销售部 重庆
40 运维部 深圳

df8 = pd.read_sql_query('select * from tb_emp', engine, index_col='eno')

df8
ename job mgr sal comm dno
eno
1359 胡一刀 销售员 3344.0 1800 200.0 30
2056 乔峰 分析师 7800.0 5000 1500.0 20
3088 李莫愁 设计师 2056.0 3500 800.0 20
3211 张无忌 程序员 2056.0 3200 NaN 20
3233 丘处机 程序员 2056.0 3400 NaN 20
3244 欧阳锋 程序员 3088.0 3200 NaN 20
3251 张翠山 程序员 2056.0 4000 NaN 20
3344 黄蓉 销售主管 7800.0 3000 800.0 30
3577 杨过 会计 5566.0 2200 NaN 10
3588 朱九真 会计 5566.0 2500 NaN 10
4466 苗人凤 销售员 3344.0 2500 NaN 30
5234 郭靖 出纳 5566.0 2000 NaN 10
5566 宋远桥 会计师 7800.0 4000 1000.0 10
7800 张三丰 总裁 NaN 9000 1200.0 20

type(df8)
pandas.core.frame.DataFrame

获取DataFrame对象的相关信息

df8.info()


Int64Index: 14 entries, 1359 to 7800
Data columns (total 6 columns):

Column Non-Null Count Dtype


0 ename 14 non-null object
1 job 14 non-null object
2 mgr 13 non-null float64
3 sal 14 non-null int64
4 comm 6 non-null float64
5 dno 14 non-null int64
dtypes: float64(2), int64(2), object(2)
memory usage: 784.0+ bytes

取前N行数据

df8.head(5)

ename job mgr sal comm dno
eno
1359 胡一刀 销售员 3344.0 1800 200.0 30
2056 乔峰 分析师 7800.0 5000 1500.0 20
3088 李莫愁 设计师 2056.0 3500 800.0 20
3211 张无忌 程序员 2056.0 3200 NaN 20
3233 丘处机 程序员 2056.0 3400 NaN 20

取后N行数据

df8.tail(3)

ename job mgr sal comm dno
eno
5234 郭靖 出纳 5566.0 2000 NaN 10
5566 宋远桥 会计师 7800.0 4000 1000.0 10
7800 张三丰 总裁 NaN 9000 1200.0 20

通过列索引获取指定的列 —> Series

df8['ename']

eno
1359 胡一刀
2056 乔峰
3088 李莫愁
3211 张无忌
3233 丘处机
3244 欧阳锋
3251 张翠山
3344 黄蓉
3577 杨过
3588 朱九真
4466 苗人凤
5234 郭靖
5566 宋远桥
7800 张三丰
Name: ename, dtype: object

type(df8['ename'])

pandas.core.series.Series

df8.ename

eno
1359 胡一刀
2056 乔峰
3088 李莫愁
3211 张无忌
3233 丘处机
3244 欧阳锋
3251 张翠山
3344 黄蓉
3577 杨过
3588 朱九真
4466 苗人凤
5234 郭靖
5566 宋远桥
7800 张三丰
Name: ename, dtype: object

花式索引获取指定的列 —> DataFrame

df8[['ename', 'job', 'sal']]

ename job sal
eno
1359 胡一刀 销售员 1800
2056 乔峰 分析师 5000
3088 李莫愁 设计师 3500
3211 张无忌 程序员 3200
3233 丘处机 程序员 3400
3244 欧阳锋 程序员 3200
3251 张翠山 程序员 4000
3344 黄蓉 销售主管 3000
3577 杨过 会计 2200
3588 朱九真 会计 2500
4466 苗人凤 销售员 2500
5234 郭靖 出纳 2000
5566 宋远桥 会计师 4000
7800 张三丰 总裁 9000

通过行索引获取指定的行 —> Series

df8.loc[2056]

ename 乔峰
job 分析师
mgr 7800.0
sal 5000
comm 1500.0
dno 20
Name: 2056, dtype: object

df8.iloc[1]

ename 乔峰
job 分析师
mgr 7800.0
sal 5000
comm 1500.0
dno 20
Name: 2056, dtype: object

df8.iloc[-13]

ename 乔峰
job 分析师
mgr 7800.0
sal 5000
comm 1500.0
dno 20
Name: 2056, dtype: object

花式索引获取指定的行 —> DataFrame

df8.loc[[2056, 7800, 1359]]

ename job mgr sal comm dno
eno
2056 乔峰 分析师 7800.0 5000 1500.0 20
7800 张三丰 总裁 NaN 9000 1200.0 20
1359 胡一刀 销售员 3344.0 1800 200.0 30

布尔索引(实现数据筛选)

df8[df8.sal >= 5000]

ename job mgr sal comm dno
eno
2056 乔峰 分析师 7800.0 5000 1500.0 20
7800 张三丰 总裁 NaN 9000 1200.0 20

切片索引

df8.loc[3088:3244]

ename job mgr sal comm dno
eno
3088 李莫愁 设计师 2056.0 3500 800.0 20
3211 张无忌 程序员 2056.0 3200 NaN 20
3233 丘处机 程序员 2056.0 3400 NaN 20
3244 欧阳锋 程序员 3088.0 3200 NaN 20

取不到结尾

df8.iloc[2:5]

ename job mgr sal comm dno
eno
3088 李莫愁 设计师 2056.0 3500 800.0 20
3211 张无忌 程序员 2056.0 3200 NaN 20
3233 丘处机 程序员 2056.0 3400 NaN 20

df8.loc[3088:3244, 'ename': 'sal']

ename job mgr sal
eno
3088 李莫愁 设计师 2056.0 3500
3211 张无忌 程序员 2056.0 3200
3233 丘处机 程序员 2056.0 3400
3244 欧阳锋 程序员 3088.0 3200

df8.loc[3088:3244, ['ename', 'sal']]

ename sal
eno
3088 李莫愁 3500
3211 张无忌 3200
3233 丘处机 3400
3244 欧阳锋 3200

获取指定单元格的值

df8.at[3088, 'job']

‘设计师’

df8.iat[2, 1]

‘设计师’

修改指定单元格的值

df8.iat[2, 1] = '女魔头'

df8
ename job mgr sal comm dno
eno
1359 胡一刀 销售员 3344.0 1800 200.0 30
2056 乔峰 分析师 7800.0 5000 1500.0 20
3088 李莫愁 女魔头 2056.0 3500 800.0 20
3211 张无忌 程序员 2056.0 3200 NaN 20
3233 丘处机 程序员 2056.0 3400 NaN 20
3244 欧阳锋 程序员 3088.0 3200 NaN 20
3251 张翠山 程序员 2056.0 4000 NaN 20
3344 黄蓉 销售主管 7800.0 3000 800.0 30
3577 杨过 会计 5566.0 2200 NaN 10
3588 朱九真 会计 5566.0 2500 NaN 10
4466 苗人凤 销售员 3344.0 2500 NaN 30
5234 郭靖 出纳 5566.0 2000 NaN 10
5566 宋远桥 会计师 7800.0 4000 1000.0 10
7800 张三丰 总裁 NaN 9000 1200.0 20

添加列

df8['married'] = [False, True, False, False, False, True, True] * 2

df8
ename job mgr sal comm dno married
eno
1359 胡一刀 销售员 3344.0 1800 200.0 30 False
2056 乔峰 分析师 7800.0 5000 1500.0 20 True
3088 李莫愁 女魔头 2056.0 3500 800.0 20 False
3211 张无忌 程序员 2056.0 3200 NaN 20 False
3233 丘处机 程序员 2056.0 3400 NaN 20 False
3244 欧阳锋 程序员 3088.0 3200 NaN 20 True
3251 张翠山 程序员 2056.0 4000 NaN 20 True
3344 黄蓉 销售主管 7800.0 3000 800.0 30 False
3577 杨过 会计 5566.0 2200 NaN 10 True
3588 朱九真 会计 5566.0 2500 NaN 10 False
4466 苗人凤 销售员 3344.0 2500 NaN 30 False
5234 郭靖 出纳 5566.0 2000 NaN 10 False
5566 宋远桥 会计师 7800.0 4000 1000.0 10 True
7800 张三丰 总裁 NaN 9000 1200.0 20 True

添加行

df8.loc[9200] = ['骆昊', '数据分析师', 7800, 999999, 99999, 20, True]

df8
ename job mgr sal comm dno married
eno
1359 胡一刀 销售员 3344.0 1800 200.0 30 False
2056 乔峰 分析师 7800.0 5000 1500.0 20 True
3088 李莫愁 女魔头 2056.0 3500 800.0 20 False
3211 张无忌 程序员 2056.0 3200 NaN 20 False
3233 丘处机 程序员 2056.0 3400 NaN 20 False
3244 欧阳锋 程序员 3088.0 3200 NaN 20 True
3251 张翠山 程序员 2056.0 4000 NaN 20 True
3344 黄蓉 销售主管 7800.0 3000 800.0 30 False
3577 杨过 会计 5566.0 2200 NaN 10 True
3588 朱九真 会计 5566.0 2500 NaN 10 False
4466 苗人凤 销售员 3344.0 2500 NaN 30 False
5234 郭靖 出纳 5566.0 2000 NaN 10 False
5566 宋远桥 会计师 7800.0 4000 1000.0 10 True
7800 张三丰 总裁 NaN 9000 1200.0 20 True
9200 骆昊 数据分析师 7800.0 999999 99999.0 20 True

df8.loc[9300] = {'ename': '王大锤', 'job': '程序员', 'sal': 800, 'married': False}

df8
ename job mgr sal comm dno married
eno
1359 胡一刀 销售员 3344.0 1800 200.0 30.0 False
2056 乔峰 分析师 7800.0 5000 1500.0 20.0 True
3088 李莫愁 女魔头 2056.0 3500 800.0 20.0 False
3211 张无忌 程序员 2056.0 3200 NaN 20.0 False
3233 丘处机 程序员 2056.0 3400 NaN 20.0 False
3244 欧阳锋 程序员 3088.0 3200 NaN 20.0 True
3251 张翠山 程序员 2056.0 4000 NaN 20.0 True
3344 黄蓉 销售主管 7800.0 3000 800.0 30.0 False
3577 杨过 会计 5566.0 2200 NaN 10.0 True
3588 朱九真 会计 5566.0 2500 NaN 10.0 False
4466 苗人凤 销售员 3344.0 2500 NaN 30.0 False
5234 郭靖 出纳 5566.0 2000 NaN 10.0 False
5566 宋远桥 会计师 7800.0 4000 1000.0 10.0 True
7800 张三丰 总裁 NaN 9000 1200.0 20.0 True
9200 骆昊 数据分析师 7800.0 999999 99999.0 20.0 True
9300 王大锤 程序员 NaN 800 NaN NaN False

删除列(inplace=True表示就地删除,不返回新的DataFrame对象)

df8.drop(columns=['married', 'mgr'], inplace=True)

删除行

df8.drop(index=[9200, 9300], inplace=True)

行索引

df8.index

Int64Index([1359, 2056, 3088, 3211, 3233, 3244, 3251, 3344, 3577, 3588, 4466,
5234, 5566, 7800],
dtype=‘int64’, name=‘eno’)

列索引

df8.columns

Index([‘ename’, ‘job’, ‘sal’, ‘comm’, ‘dno’], dtype=‘object’)

值 —> ndarray

df8.values

array([[‘胡一刀’, ‘销售员’, 1800, 200.0, 30.0],
[‘乔峰’, ‘分析师’, 5000, 1500.0, 20.0],
[‘李莫愁’, ‘女魔头’, 3500, 800.0, 20.0],
[‘张无忌’, ‘程序员’, 3200, nan, 20.0],
[‘丘处机’, ‘程序员’, 3400, nan, 20.0],
[‘欧阳锋’, ‘程序员’, 3200, nan, 20.0],
[‘张翠山’, ‘程序员’, 4000, nan, 20.0],
[‘黄蓉’, ‘销售主管’, 3000, 800.0, 30.0],
[‘杨过’, ‘会计’, 2200, nan, 10.0],
[‘朱九真’, ‘会计’, 2500, nan, 10.0],
[‘苗人凤’, ‘销售员’, 2500, nan, 30.0],
[‘郭靖’, ‘出纳’, 2000, nan, 10.0],
[‘宋远桥’, ‘会计师’, 4000, 1000.0, 10.0],
[‘张三丰’, ‘总裁’, 9000, 1200.0, 20.0]], dtype=object)
数据重塑

重置索引(将原来的索引丢弃或变成普通列)

df8.reset_index(inplace=True)
df7.reset_index(inplace=True)
df7

dno dname dloc
0 10 会计部 北京
1 20 研发部 成都
2 30 销售部 重庆
3 40 运维部 深圳

df8['dno'] = df8.dno.astype('i8')

df8
eno ename job sal comm dno
0 1359 胡一刀 销售员 1800 200.0 30
1 2056 乔峰 分析师 5000 1500.0 20
2 3088 李莫愁 女魔头 3500 800.0 20
3 3211 张无忌 程序员 3200 NaN 20
4 3233 丘处机 程序员 3400 NaN 20
5 3244 欧阳锋 程序员 3200 NaN 20
6 3251 张翠山 程序员 4000 NaN 20
7 3344 黄蓉 销售主管 3000 800.0 30
8 3577 杨过 会计 2200 NaN 10
9 3588 朱九真 会计 2500 NaN 10
10 4466 苗人凤 销售员 2500 NaN 30
11 5234 郭靖 出纳 2000 NaN 10
12 5566 宋远桥 会计师 4000 1000.0 10
13 7800 张三丰 总裁 9000 1200.0 20

连表(how - 连接的方式:内连接、左外、右外、全外,on - 基于哪个字段连表)

如果左表和右表连表字段名称不相同,那么就用left_on和right_on来指定连表字段

df8.merge(df7,how='left',left_on='dno',right_on='dno')


df8.merge(df7, how=‘left’, on=‘dno’)
eno ename job sal comm dno dname dloc
0 1359 胡一刀 销售员 1800 200.0 30 销售部 重庆
1 2056 乔峰 分析师 5000 1500.0 20 研发部 成都
2 3088 李莫愁 女魔头 3500 800.0 20 研发部 成都
3 3211 张无忌 程序员 3200 NaN 20 研发部 成都
4 3233 丘处机 程序员 3400 NaN 20 研发部 成都
5 3244 欧阳锋 程序员 3200 NaN 20 研发部 成都
6 3251 张翠山 程序员 4000 NaN 20 研发部 成都
7 3344 黄蓉 销售主管 3000 800.0 30 销售部 重庆
8 3577 杨过 会计 2200 NaN 10 会计部 北京
9 3588 朱九真 会计 2500 NaN 10 会计部 北京
10 4466 苗人凤 销售员 2500 NaN 30 销售部 重庆
11 5234 郭靖 出纳 2000 NaN 10 会计部 北京
12 5566 宋远桥 会计师 4000 1000.0 10 会计部 北京
13 7800 张三丰 总裁 9000 1200.0 20 研发部 成都

pd.merge(df7, df8, how='outer', on='dno')

dno dname dloc eno ename job sal comm
0 10 会计部 北京 3577.0 杨过 会计 2200.0 NaN
1 10 会计部 北京 3588.0 朱九真 会计 2500.0 NaN
2 10 会计部 北京 5234.0 郭靖 出纳 2000.0 NaN
3 10 会计部 北京 5566.0 宋远桥 会计师 4000.0 1000.0
4 20 研发部 成都 2056.0 乔峰 分析师 5000.0 1500.0
5 20 研发部 成都 3088.0 李莫愁 女魔头 3500.0 800.0
6 20 研发部 成都 3211.0 张无忌 程序员 3200.0 NaN
7 20 研发部 成都 3233.0 丘处机 程序员 3400.0 NaN
8 20 研发部 成都 3244.0 欧阳锋 程序员 3200.0 NaN
9 20 研发部 成都 3251.0 张翠山 程序员 4000.0 NaN
10 20 研发部 成都 7800.0 张三丰 总裁 9000.0 1200.0
11 30 销售部 重庆 1359.0 胡一刀 销售员 1800.0 200.0
12 30 销售部 重庆 3344.0 黄蓉 销售主管 3000.0 800.0
13 30 销售部 重庆 4466.0 苗人凤 销售员 2500.0 NaN
14 40 运维部 深圳 NaN NaN NaN NaN NaN

beijing_df = pd.read_csv(
    'jobs/beijing_data.csv',
    usecols=['company_name', 'salary', 'site', 'year', 'edu', 'job_name', 'job_type']
)

beijing_df
company_name salary site year edu job_name job_type
0 中国电信云 20-40K·17薪 北京 海淀区 西山 经验不限 本科 Python python
1 奇虎360 20-40K·15薪 北京 朝阳区 酒仙桥 3-5年 大专 Python python
2 VIPKID 20-40K·14薪 北京 朝阳区 十里堡 5-10年 本科 Python python
3 天阳科技 12-24K 北京 石景山区 八宝山 1-3年 本科 python工程师 python
4 武汉佰钧成 12-17K 北京 朝阳区 三元桥 3-5年 大专 python开发 python
… … … … … … … …
1162 长城汽车 25-45K 北京 昌平区 回龙观 5-10年 本科 中台产品经理 产品经理
1163 阿里巴巴大文娱 30-35K 北京 朝阳区 望京 3-5年 本科 文娱-用户产品经理 产品经理
1164 蜜蜂汇金 22-23K·15薪 北京 朝阳区 四惠 3-5年 本科 数据产品经理 产品经理
1165 辰安科技 20-25K 北京 海淀区 西北旺 5-10年 本科 产品经理 产品经理
1166 便利蜂 25-50K·14薪 北京 朝阳区 太阳宫 3-5年 本科 高级策略产品经理 产品经理
1167 rows × 7 columns

chengdu_df = pd.read_csv(
    'jobs/chengdu_data.csv',
    usecols=['company_name', 'salary', 'site', 'year', 'edu', 'job_name', 'job_type']
)

chengdu_df
company_name salary site year edu job_name job_type
0 软通动力集团 10-15K 成都 武侯区 草金立交 1-3年 本科 python开发 python
1 思湃德 20-40K 成都 双流区 华阳 3-5年 本科 Python python
2 源码时代 15-20K 成都 武侯区 石羊 3-5年 大专 python 讲师 python
3 三源合众 6-10K 成都 武侯区 新会展 1年以内 本科 Python python
4 软通动力 8-13K 成都 武侯区 机投 1-3年 本科 python开发 python
… … … … … … … …
989 第壹街舞 15-30K·13薪 成都 武侯区 跳伞塔 3-5年 本科 产品经理-ERP项目经理 产品经理
990 易停车 6-8K 成都 3-5年 大专 产品经理 产品经理
991 金瑞麒科技 10-15K 成都 双流区 华阳 3-5年 本科 产品经理 产品经理
992 朗培商学院 11-20K 成都 3-5年 大专 中高级移动产品经理 产品经理
993 微品致远 8-11K 成都 武侯区 高升桥 1-3年 本科 产品经理(成都) 产品经理
994 rows × 7 columns

pd.concat([beijing_df, chengdu_df], ignore_index=True, axis=0)

company_name salary site year edu job_name job_type
0 中国电信云 20-40K·17薪 北京 海淀区 西山 经验不限 本科 Python python
1 奇虎360 20-40K·15薪 北京 朝阳区 酒仙桥 3-5年 大专 Python python
2 VIPKID 20-40K·14薪 北京 朝阳区 十里堡 5-10年 本科 Python python
3 天阳科技 12-24K 北京 石景山区 八宝山 1-3年 本科 python工程师 python
4 武汉佰钧成 12-17K 北京 朝阳区 三元桥 3-5年 大专 python开发 python
… … … … … … … …
2156 第壹街舞 15-30K·13薪 成都 武侯区 跳伞塔 3-5年 本科 产品经理-ERP项目经理 产品经理
2157 易停车 6-8K 成都 3-5年 大专 产品经理 产品经理
2158 金瑞麒科技 10-15K 成都 双流区 华阳 3-5年 本科 产品经理 产品经理
2159 朗培商学院 11-20K 成都 3-5年 大专 中高级移动产品经理 产品经理
2160 微品致远 8-11K 成都 武侯区 高升桥 1-3年 本科 产品经理(成都) 产品经理
2161 rows × 7 columns

import os
​
os.listdir('jobs')

[‘beijing_data.csv’,
‘chengdu_data.csv’,
‘guangzhou_data.csv’,
‘hangzhou_data.csv’,
‘nanjing_data.csv’,
‘shanghai_data.csv’,
‘shenzhen_data.csv’,
‘wuhan_data.csv’,
‘xian_data.csv’]

import os
​
# 下括号可以换成('res/jobs/'+csv_file)
​
dfs = [pd.read_csv(os.path.join('jobs', csv_file),
                   usecols=['company_name', 'salary', 'site', 'year', 'edu', 'job_name', 'job_type'])
       for csv_file in os.listdir('jobs')]
all_jobs_df = pd.concat(dfs, ignore_index=True)

all_jobs_df
company_name salary site year edu job_name job_type
0 中国电信云 20-40K·17薪 北京 海淀区 西山 经验不限 本科 Python python
1 奇虎360 20-40K·15薪 北京 朝阳区 酒仙桥 3-5年 大专 Python python
2 VIPKID 20-40K·14薪 北京 朝阳区 十里堡 5-10年 本科 Python python
3 天阳科技 12-24K 北京 石景山区 八宝山 1-3年 本科 python工程师 python
4 武汉佰钧成 12-17K 北京 朝阳区 三元桥 3-5年 大专 python开发 python
… … … … … … … …
9820 公众智能 8-10K 西安 3-5年 本科 产品经理 产品经理
9821 微感 8-10K 西安 雁塔区 紫薇田园都市 3-5年 大专 产品经理 产品经理
9822 巴斯光年 10-20K 西安 雁塔区 大雁塔 3-5年 本科 产品经理 产品经理
9823 西大华特科技 5-8K 西安 雁塔区 唐延路 1-3年 硕士 产品经理(农药) 产品经理
9824 西安纯粹科技 3-6K 西安 雁塔区 玫瑰大楼 1-3年 本科 产品经理 产品经理
9825 rows × 7 columns

all_jobs_df.index.name = 'id'
all_jobs_df.to_csv('all_jobs.csv')

你可能感兴趣的:(Python数据分析,pandas,python,开发语言)