Python_packages

列举Python中常用的模块和包。

os模块

相关函数

增删改查

os.listdir() 返回指定目录下的所有文件和目录名
os.mkdir()
os.rmdir() 删除空目录
os.chdir() 改变当前目录,到指定目录中
os.rename() 重命名目录名或者文件名

判断

os.path.exists()
os.path.isfile()
os.path.isdir()
os.path.join(path,name)

输入一个文件的路径
os.path.basename() 返回输入的文件名部分
os.path.dirname() 返回输入的路径部分
os.path.abspath() 获得绝对路径

操作举例

创建/删除目录

1
2
3
4
5
6
7
8
9
10
import os
new_dir=""

if not os.path.exists(new_dir):
os.makedirs(new_dir)

old_dir=""
if os.path.exists(old_dir):
if len(os.path.listdir) == 0:
os.rmdir(old_dir)

访问目录下的文件

1
2
3
4
5
6
7
8
9
import os
# 查找文件名包含指定字符串的文件
sub_str="xxx"
cur_dir=os.getcwd()
files=os.listdir(cur_dir)
for item in files:
if os.path.isfile(os.path.join(cur_dir,item)):
if item.find(sub_str) != -1:
print(os.path.join(cur_dir,item))

pandas包

pandas官方API文档

这边主要列举下DataFrame的增删改查

DataFrame的API

摘引自

创建

1、使用dict进行创建

1
2
3
4
5
test_dict = {'id':[1,2,3,4,5,6],'name':['Alice','Bob','Cindy','Eric','Helen','Grace '],'math':[90,89,99,78,97,93],'english':[89,94,80,94,94,90]}

test_dict_df = pd.DataFrame(test_dict)
//或者
test_dict_df = pd.DataFrame(data=test_dict)

如果想要生成只有一行的DataFrame

test_dict_df = pd.DataFrame({'id':1,'name':'Alice'},pd.Index(range(1)))

后面必须提供Index著名数据的组数。如果有n个数据,后面的Index必须跟前面的数据组数一致,pd.Index(range(n))。

选择部分列

有些时候我们只需要选择dict中部分的键当做DataFrame的列,那么我们可以使用columns参数,例如我们只选择’id’,’name’列:

test_dict_df = pd.DataFrame(data=test_dict,columns=['id','name'])

3、使用csv文件构建DataFrame

df = pd.read_csv(‘./xxx.csv’)
函数参数参考

把DataFrame存入csv文件

1
2
csv_file = open('Coke_beautiful.csv', 'w')
df.to_csv(csv_file)

访问

逐行遍历,使用iterrows()

for index,row in df.iterrows() index是索引编号,row对应行的Series

添加

1、添加列

1
2
3
new_columns = [92,94,89,77,87,91]
test_dict_df.insert(2,'pyhsics',new_columns)
#test_dict_df.insert(2,'pyhsics',new_columns,allow_duplicates=True)

DataFrame默认不允许添加重复的列,但是在insert函数中有参数allow_duplicates=True,设置为True后,就可以添加重复的列

2、添加行

loc实际是改的操作,如果loc[index]中的index已经存在,则新的值会覆盖之前的值。

1
2
new_line = [7,'Iric',99]
test_dict_df.loc[6]= new_line

使用append

1
test_dict_df = test_dict_df.append(pd.DataFrame([new_line],columns=['id','name','physics']))

append之后生成一个新的DataFrame再赋给原先的就相当于添加了一行。如果不赋给test_dict_df,这个DataFrame不会改变。

筛选

loc方法

一般用loc,根据给定的索引和列名中定位。支持切片和条件选择。

test_dict_df.loc[1:4,'english':'math']

test_dict_df.loc[test_dict_df['english']>90]

groupby方法

参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
df = pd.DataFrame({'key1':list('ababa'),
'key2': ['one','two','one','two','one'],
'data1': np.random.randn(5),
'data2': np.random.randn(5)})
print(df)

data1 data2 key1 key2
0 -1.313101 -0.453361 a one
1 0.791463 1.096693 b two
2 0.462611 1.150597 a one
3 -0.216121 1.381333 b two
4 0.077367 -0.282876 a one

df.groupby('key1').mean()
data1 data2
key1
a -0.257707 0.138120
b 0.287671 1.239013
#可以看出没有key2列,因为df[‘key2’]不是数值数据,所以被从结果中移除。默认情况下,所有数值列都会被聚合,虽然有时可能被过滤为一个子集。

删除

1、删除列

test_dict_df.drop(columns=['name'])

2、删除行

drop这边不支持切片写法

test_dict_df.drop([0:4])

只能

test_dict_df.drop([0,1,2,3,4])

和append一样,函数返回的都是一个新的DataFrame,要在源DataFrame上进行操作就得加上inplace=True,否则不会在test_dict_df上改动,要么就把新的DataFrame赋给源DataFrame。

修改

和前面提到的一样loc会直接覆盖掉原有的值

数值修改

1、对列

test_dict_df.loc[:,('english','id')]=[[90,1],[80,2],[80,2],[80,2],[80,2],[80,2]]

2、对行

test_dict_df.loc[0:1,('english','id','math','name')]=[[90,1,100,'Alice_m'],[70,2,100,'Bob']]

3、对某个行列区域

综合下对行列的操作,合并一下

test_dict_df.loc[1:2,('english','id')]=[[38,2],[23,2]]

列名修改

test_dict_df.rename(columns={'english':'english_new', 'name':'name_new'},inplace=True)

索引修改

默认索引都是自动从0开始计数的,在表中最左边一列。修改部分索引的显示可以使用rename,譬如特别标记索引6和8对应的两列。

test_dict_df.rename({6:'star1', 8:'star2'},inplace=True)

设置其他列为索引

test_dict_df.set_index('id_new')