Pandas内容速查
引入Pandas包
使用此包前,需要import pandas
。没有包的可以用pip或者pycharm里面下载。
DataFrame类
说明
这个是Pandas里面的基础对象,是一个有且从零开始的index
的表格。
构造函数
pd.DataFrame()
:创建一个空的DataFrame对象。
常用的关键字有data
, index
, columns
,默认都是None。一般通过关键字赋值参数的方法来进行构造
1 | import pandas as pd |
字典和numpy对象也可以构造DataFrame对象
用字典构造的话,key就等于columns
Series类
说明
这个是一个数据序列类。可以用于存放各种数据,包括一些数据的操作和构造DataFrame类
。也是Pandas里面的一个基础类
DataFrame里面的每一列就是一个Series对象
注意:Series对象可__迭代__看__映射__
构造函数
pd.Series()
:创建一个空的序列对象pd.Series(lst)
:用列表对象lst创建一个Series对象
数据的导入与导出
导入数据
以下导入对象全是用
pd.read_csv(filename)
:从CSV文件导入数据pd.read_table(filename)
:从限定分隔符的文本文件导入数据,诸如.tsv
文件pd.read_excel(filename)
:从Excel文件导入数据pd.read_json(json_string)
:从JSON格式的字符串导入数据pd.read_html(url)
:解析URL、字符串或者HTML文件,抽取其中的tables表格。pd.DataFrame(dict)
:从字典对象导入数据,Key是列名,Value是数据。这个常用于在IDE内部构造pd.read_sql(query, connection_object)
:从SQL表/库导入数据
导出数据
处理结束后的导出
df.to_csv(filename)
:导出数据到CSV文件df.to_excel(filename)
:导出数据到Excel文件df.to_sql(table_name, connection_object)
:导出数据到SQL表df.to_json(filename)
:以Json格式导出数据到文本文件
在所有方法里面的将关键字形参index=False
可以除掉索引
在程序内数据结构类型转换
NPobj = df.to_numpy()
:变成numpy
对象Listobj =df.values.tolist()
:将除了标题的地方变成list
对象df.set_index(key).T.to_dict()
:变成复合字典。df是DataFrame
对象;key是标题里面的某个值(用前最好检查key存不存在)
数据处理
初步信息
df.count()
:返回每一列中的非空值的个数df.shape
:这里调用的是__属性__,可以查看矩阵的行列数df.info()
:返回列表的内存、类型、列名等基础信息s.value_counts()
:统计这一列中每个单独数据出现的次数df.keys()
:获得信息头,是一个Index实例,是可以迭代的
数据计算
df.sum()
:使这一列相加,并且视NaN为0df.max()
:返回每一列的最大值df.min()
:返回每一列的最小值
数学统计
df.describe()
:查看数值类型数据每列的汇总统计。有min max count mean std
df.mean()
:返回所有列的均值_(这里需要注意一下,我的电脑跑不出来,只能存describe()里查看)_df.std()
:返回每一列的标准差df.median()
:返回每一列的中位数df.corr()
:返回列与列之间的相关系数
分割数据
行式分割
df.head(n)
:n是整数,代表要取前n行形成新的DataFramedf.tail(n)
:n是整数,代表要取后n行形成新的DataFrame
列式分割
df['name']
:name是列的名字。返回一个Series对象,包含那一列。如果name
有多个,那么返回一个DataFrame对象
切片操作
s = df.iloc[a, b]
:a,b这里不是某个对象,是切片操作。iloc
切片只能接受位置数字的值(从0开始)1
2# df是某个DataFrame对象
s1 = df.iloc[:, [0, 2]] # 切出第1列和第3列的所有行s = df.loc[a, b]
:具体同上,loc
只接受索引
1
2# df是某个DataFrame对象
s1 = df.loc[[0, 8], ['star_rating']] # 切出第1行和第9行的‘star_rating’列
条件筛选
df = df[df['label'] == condition]
:条件筛选,把所有['label']
列为condition
的都给筛选出来。数据类型筛选
1
2
3# 获得相关类型的数据
df = df.select_dtypes(exclude='object') # 除了'object'数据类型以外的数据
df2 = df2.select_dtypes(include='number') # 只有'number'数据类型的数1
2
3
4
5
6# 需要获得数据列名的情况
col = df.select_dtypes(exclude='object').columns
col2 = df.select_dtypes(include='number').columns
df2 = df.loc[:,col] # 除了'object'数据类型以外的数据
df3 = df.loc[:,col2] # 只有'number'数据类型的数据
合并数据
这里将说明行或者列__相同__的情况下
df1 = df1.append(df2)
:将df2添加到df1行的后面。df1,df2都是DataFrame对象,__注意__这里的append()
是有返回值的,和列表的append不一样!!!!!df = pd.concat(frame, axis=0)
:将将frame里面的所有DataFrame对象整合后,添加到df行的后面。这里的frame是装着DataFrame的列表- 列数相同的话,直接
df['columns_name'] = s
就可以了,s指列数与原来相同但列名不同的Series对象
列数不同并且要进行添加的方法
删除index法
1
2
3
4
5
6
7import pandas as pd
# 将索引消除,这一步对于列数不同的序列合并至关重要
df1 = df1.reset_index(drop=True)
df2 = df2.reset_index(drop=True)
# 用concat函数将其连接
df = pd.concat([df1, df2], axis=1) # axis要是1
判断和删除删除重复的项
df.duplicated()
:判断有无重复的项df.drop_duplicates()
:删除重复的项,如果对Series使用则还是Series- 注意:这里重复的项都是只所有列均一样的_重复_
替换数据
```python df["bj"].fillna(df["sz"],inplace=True) # 用"sz"列的同行数据将"bj"列的空值替换掉
1
2
3
* ```python
df.loc[df["sz"].isin([2,6]),"sz"]=-4 # 在1的基础上,将"sz"列为2或者6的数据替换成-4replace