目录
pandas
生成DataFrame
import pandas as pd
import numpy as np
data = pd.data_range('2022-10-01', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=datas, columsn=list('ABCD'))
A B C D
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
2013-01-05 -0.424972 0.567020 0.276232 -1.087401
2013-01-06 -0.673690 0.113648 -1.478427 0.524988
用Series字典对象生成DataFrame
df = pd.DataFrame({
'A': 1.,
'B': pd.Timestamp('20130102'),
'C': pd.Series(1, index=list(range(4)), dtype='float32'),
'D': np.array([3] * 4, dtype='int32'),
'E': pd.Categorical(["test", "train", "test", "train"]),
'F': 'foo'})
A B C D E F
0 1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
2 1.0 2013-01-02 1.0 3 test foo
3 1.0 2013-01-02 1.0 3 train foo
df.dtype # DataFrame 的列有不同数据类型
A float64
B datetime64[ns]
C float32
D int32
E category
F object
读取数据
1.读取CSV数据
data=pd.read_csv('data.csv')
data=pd.read_csv('data.csv',names=['A','B','C']) # 指定name参数,给列表的不同列命名
data=pd.read_csv('data.csv',index_col='2022年') # 指定行索引
data=pd.read_csv('data.csv',na_values=[123]) # 把第0行的123变成nan
data.to_csv('test/out1.csv') # 将文件保存当前目录下的test文件夹下的out1.csv文件中
2.读取Excel数据
#打开excel数据表
data=pd.ExcelFile("data.xlsx")
#使用read_excel方法来读取打开的EXCEL中的Sheet表
#并且设置行索引为分数
gdp1=pd.read_excel(data,'Sheet1',index_col="分数")
data.to_excel('test/out1.excel')
查看数据
dates = pd.date_range('20221001', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
df['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
print(df)
A B C D E
2013-01-01 -0.611989 0.120009 0.229388 1.686356 one
2013-01-02 0.632596 -0.206963 0.406610 -0.172598 one
2013-01-03 0.904194 -0.142490 -1.192002 0.839056 two
2013-01-04 -0.487144 -0.024364 -0.354199 1.114304 three
2013-01-05 -0.053873 -0.073507 0.442857 1.399136 four
2013-01-06 -0.101276 -1.374752 0.916079 0.357211 three
print(df[df['E'].isin(['two', 'three'])])
A B C D E
2013-01-03 0.904194 -0.142490 -1.192002 0.839056 two
2013-01-04 -0.487144 -0.024364 -0.354199 1.114304 three
2013-01-06 -0.101276 -1.374752 0.916079 0.357211 three
df(head(2)) # 查看前两行数据
df(hail(3)) # 查看后三行数据
df.index # 显示索引
df.columns # 显示列名
df.describe() # 查看数据的统计摘要
df.T # 转置
df.sort_index(axis=1,ascending=False) # 按轴排序
df.sort_values(by='B') # 按值排序
df.loc['20130102', ['A', 'B']] # 返回对象降维
转换数据格式
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.to_numpy())
DataFrame.to_numpy() 输出底层数据的 NumPy 对象。
df中类型越多,DataFrame.to_numpy() 操作就会耗费较多资源。
这也是 Pandas 和 NumPy 的本质区别:NumPy 数组只有一种数据类型,DataFrame 每列的数据类型各不相同。
检查数据
查看一列的一些基本统计信息:data.columnname.describe()
选择一列:data['columnname']
选择一列的前几行数据:data['columnsname'][:n]
选择多列:data[['column1','column2']]
pandas 部分优势
处理浮点与非浮点数据里的缺失数据,表示为 NaN;
大小可变:插入或删除 DataFrame 等多维#对象的列;
自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;
强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;
把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;
基于智能标签,对大型数据集进行切片、花式索引、子集分解等操作;
直观地合并(merge)、**连接(join)**数据集;
灵活地重塑(reshape)、**透视(pivot)**数据集;
pandas常常和numpy一起使用
import pandas as pd
import numpy as np
df = pd.DataFrame(pd.read_csv('name', header=1))
df = pd.DataFrame(pd.read_excel('name.xlsx'))
df.to_csv('excel_to_python.csv')
df.to_excel('excel_to_python.xlsx')
df.corr() # 表的相关性分析
df.shape # 查看维度
df.info() # 查看数据表基本
df.dtype # 查看每一列数据格式
df['B'].dtype # 查看某一列数据格式
df.isnull() # 查看空值
df['B'].isnull() # 查看某列空值
df['B'].unique() # 查看某列唯一值
df.values # 查看数据表的值
df.columns # 查看列名
df.head() # 查看数据前五行
df.tail() # 查看数据后五行
df.fillna(value=0) # 用0填充空值
df['prince'].fillna(df['prince'].mean()) # 用prince均值填充空值
df['city'] = df['city'].str.lower() # 大小写转换
df['price'].astype('int') # 转换数据格式
df.rename(columns={'category', 'category-size'}) # 更改列名
df['city'].drop_duplicates() # 删除后出现的重复值
df['city'].drop_duplicates(keep='last') # 删除先出现的重复值
df['city'].replace('sh', 'shanghai') # 数据替换
pd.concat(objs, axis=0, join='outer', join_axes=None,
ignore_index=False,keys=None, levels=None,
names=None, verify_integrity=False,copy=True)
result = pd.concat([df1, df2, df3]) # 合并df1,df2,df3
df.set_index('id') # 设置索引列
df.sort_values(['age']) # 按照age排序
df.sort_index() # 按照索引列排序
# loc函数按标签值进行提取
# iloc按位置进行提取
# ix可以同时按标签和位置进行提取
df.loc[3] # 按照索引提取单行数值
df.iloc[0:5] # 提取区域行数值
df.ix[: '2013-01-03', :4] # 2013-01-03之前的前四列数据
df['city'].isin(['beijing']) # 判断city是否是beijing
df['city'].isin(['beijing','shanghai']) # city中是否有beijing,shanghai
# 与 或 非
# &
df.loc[(df['age'] > 25) & (df['city'] == 'beijing'), ['id','city','age','category','gender']]
# |
df.loc[(df['age'] > 25) | (df['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['age'])
# !=
df.loc[(df['age'] > 25) != (df['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['id'])
# 对筛选的数据按照city列进行计数
df.loc[(df['age'] > 25) != (df['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['id']).city.count()
# query 函数筛选
df.query("city == ['beijing', 'shanghai']")
# 筛选后的结果按照prince求和
df.query('city == ["beijing", "shanghai"]').prince.sum()
# 对所有列进行计数
df.groupby('city').count()
# 按照city对id进行计数
df.groupby('city')['id'].count()
# 对两个字段进行汇总计数
df groupby('city', 'size')['id'].count()
df.groupby('city')['prince'].agg([np.sum, np.mean])