返回顶部

pandas模块篇(之三)

今日内容概要

目标:将Pandas尽量结束

  • 如何读取外部excel文件数据到DataFrame中
  • 针对DataFrame的常用数据操作
  • 索引与切片
  • 操作DataFrame的字段名称
  • 时间对象序列操作
  • 数据分组与聚合
  • 练习题

今日内容详细

如何读取外部excel文件数据到DataFrame中

df = pd.read_csv('douban_movie.csv')  # 由于当前文件跟excel文件在同一个目录下所以可以直接写文件名
# 如果不在同一个路径下 那么需要输入excel文件的绝对路径
# '''
# 绝对路径
#     类似于全球具体坐标,任何人拿到该坐标都可以查找
# 相对路径
#     相对于一个参照物,并不是所有人都可以根据该坐标找到
# '''
df


# 在读取文件的时候还可以自定义列
df1 = pd.read_csv('douban_movie.csv',index_col='产地') 
# df1.set_index('类型')
df1
# 都是用来指定读取出来的excel数据的左侧行名称(行名称必须是表格中存在的)

# 将之前设置的行索引取消
df1.reset_index()

基本操作

# 指定看前面多少条
df.head(5)
名字	投票人数	类型	产地	上映时间	时长	年代	评分	首映地点
0	肖申克的救赎	692795.0	剧情/犯罪	美国	1994-09-10 00:00:00	142.0	1994	9.6	多伦多电影节
1	控方证人	42995.0	剧情/悬疑/犯罪	美国	1957-12-17 00:00:00	116.0	1957	9.5	美国
2	美丽人生	327855.0	剧情/喜剧/爱情	意大利	1997-12-20 00:00:00	116.0	1997	9.5	意大利
3	阿甘正传	580897.0	剧情/爱情	美国	1994-06-23 00:00:00	142.0	1994	9.4	洛杉矶首映
4	霸王别姬	478523.0	剧情/爱情/同性	中国大陆	1993-01-01 00:00:00	171.0	1993	9.4	香港
        
# 查看尾部指定条数的数据
df.tail(5)

# 查看数据条数
len(df)
38735

# 查看数据的行列个数
df.shape
(38735, 9)

# 查看行索引
df.index
RangeIndex(start=0, stop=38735, step=1)

# 查看列字段
df.columns
Index(['名字', '投票人数', '类型', '产地', '上映时间', '时长', '年代', '评分', '首映地点'], dtype='object')

数据导出

# 将DataFrame导出excel文件
df.to_csv('db1.csv')  # 默认index=True 自动将DataFrame的行索引也导出


df.to_csv('db2.csv',index=False)  # 忽略行索引

索引与切片

DataFrame也是由行索引和列索引,也可以通过标签和位置两种方法进行
方式1
	两个中括号,先取列再取行  df['A'][0]
方式2
	使用loc/iloc属性:一个中括号逗号隔开,先取行再取列
   	都是左侧
    
df.loc[0:5]
名字	投票人数	类型	产地	上映时间	时长	年代	评分	首映地点
0	肖申克的救赎	692795.0	剧情/犯罪	美国	1994-09-10 00:00:00	142.0	1994	9.6	多伦多电影节
1	控方证人	42995.0	剧情/悬疑/犯罪	美国	1957-12-17 00:00:00	116.0	1957	9.5	美国
2	美丽人生	327855.0	剧情/喜剧/爱情	意大利	1997-12-20 00:00:00	116.0	1997	9.5	意大利
3	阿甘正传	580897.0	剧情/爱情	美国	1994-06-23 00:00:00	142.0	1994	9.4	洛杉矶首映
4	霸王别姬	66666666.0	剧情/爱情/同性	中国大陆	1993-01-01 00:00:00	171.0	1993	9.4	香港
5	泰坦尼克号	157074.0	剧情/爱情/灾难	美国	2012-04-10 00:00:00	194.0	2012	9.4	中国大陆
df.iloc[0:5]
名字	投票人数	类型	产地	上映时间	时长	年代	评分	首映地点
0	肖申克的救赎	692795.0	剧情/犯罪	美国	1994-09-10 00:00:00	142.0	1994	9.6	多伦多电影节
1	控方证人	42995.0	剧情/悬疑/犯罪	美国	1957-12-17 00:00:00	116.0	1957	9.5	美国
2	美丽人生	327855.0	剧情/喜剧/爱情	意大利	1997-12-20 00:00:00	116.0	1997	9.5	意大利
3	阿甘正传	580897.0	剧情/爱情	美国	1994-06-23 00:00:00	142.0	1994	9.4	洛杉矶首映
4	霸王别姬	66666666.0	剧情/爱情/同性	中国大陆	1993-01-01 00:00:00	171.0	1993	9.4	香港

数据操作

df['名字']  # 展示形式是Series

df[['名字']]  # 用中括号扩一下就会变成表格的形式展示

# 一次性获取多个列
df[['名字','评分','类型']]

# 切片获取数据条数
df[0:10]

# 获取指定数据
df.at[4,'名字']  # at['行索引值','列名称']
# 修改指定数据
df.at[4,'名字'] = '爱情动作科幻大混合'
# 利用关键字指定索引
df.loc[1].at['名字']


# 切片之后获取指定的列数据
df[1:5][['名字','类型','年代']]


# 数据快速筛选
df[(df.评分 > 8.5) & (df.评分 < 9.0)]

数据自定义展示

>>> df = pd.DataFrame({
...     'col1': ['A', 'A', 'B', np.nan, 'D', 'C'],
...     'col2': [2, 1, 9, 8, 7, 4],
...     'col3': [0, 1, 9, 4, 2, 3],
... })
>>> df
    col1 col2 col3
0   A    2    0
1   A    1    1
2   B    9    9
3   NaN  8    4
4   D    7    2
5   C    4    3

Sort by col1
>>> df.sort_values(by=['col1'])
    col1 col2 col3
0   A    2    0
1   A    1    1
2   B    9    9
5   C    4    3
4   D    7    2
3   NaN  8    4

Sort by multiple columns

>>> df.sort_values(by=['col1', 'col2'])
    col1 col2 col3
1   A    1    1
0   A    2    0
2   B    9    9
5   C    4    3
4   D    7    2
3   NaN  8    4
Sort Descending

>>> df.sort_values(by='col1', ascending=False)
    col1 col2 col3
4   D    7    2
5   C    4    3
2   B    9    9
0   A    2    0
1   A    1    1
3   NaN  8    4
Putting NAs first

>>> df.sort_values(by='col1', ascending=False, na_position='first')
    col1 col2 col3
3   NaN  8    4
4   D    7    2
5   C    4    3
2   B    9    9
0   A    2    0
1   A    1    1

# 后面还可以对排序之后的结果筛选
df.sort_values(['列名1','列名2'],ascending=True)[['目标列1','目标列2']]

操作列

df.rename(column={'旧列名称':'新列名称'},inplace=True)
# 能修改 但是会报个错误 可以添加下列配置
pd.set_option('mode.chained_assignment',None)


# 创建新的列
df['新列名称']=df.列名称/(df.列名称1+df.列名称2)

# 自定义位置
df.insert(3,'新列名称',新数据)

操作行

# 方式1 append
>>> df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
>>> df
   A  B
0  1  2
1  3  4
>>> df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))

>>> df.append(df2)
   A  B
0  1  2
1  3  4
0  5  6
1  7  8
With `ignore_index` set to True:
    
>>> df.append(df2, ignore_index=True)
   A  B
0  1  2
1  3  4
2  5  6
3  7  8



# 方式2 concat功能更强大  可以拼接Series和DataFrame
pd.concat([res,df])
pd.concat([res,df],ignore_index=True)
'''
本质其实就相当于拼接表格数据
'''
posted @ 2020-09-08 15:03  Satan—yuan  阅读(208)  评论(1编辑  收藏  举报