美文网首页
pandas学习

pandas学习

作者: 金融非耐斯 | 来源:发表于2023-04-12 15:32 被阅读0次

1.pandas是什么?

pandas是基于Numpy创建的Python库,为Python提供了易于使用的数据结构和数据分析工具。

2.如何使用pandas?

2.1 导入pandas库

import pandas as pd

2.2 数据结构

1) Series

series可以理解为是一维数组,series翻译过来是连续的、串联,使用方式如下:

s = pd.Series([1,2,45,5], index=['a','b','c','d'])
index data
a 1
b 2
c 45
d 5
2) DataFrame

DataFrame是一个二维的数组,使用方式如下:

data = {'姓名':['张三','李四','王五'],
       '性别':['男','女','女'],
       '年龄':['21','15','18']}
df = pd.DataFrame(data, columns=['姓名','性别','年龄'])
姓名 性别 年龄
张三 1 21
李四 15
王五 18
3)表格的操作
  • 读取、写入CSV
pd.read_csv('file.csv', header=None, nrows=5)
df.to_csv('myDataFrame.csv')
  • 读取、写入EXCEL
pd.read_ecxel('file.xlsx')
pd.to_excel('myDataFrame.xlsx', sheet_name='Sheet1')
# 读取内含多个表格的EXCEL
xlsx = pd.ExcelFile('file.xls')
df = pd.read_excel(xlsx, 'Sheet1')
4)定位元素at,iat,loc,iloc,ix

带i的是索引,不带i的是标签,ix是既可以用标签,也可以用位置

print(df.at['行标签名', '列标签名'])
print(df.iat['行索引号', '列索引号'])
 
print(df.loc['行标签名', '列标签名'])
print(df.iloc[行索引数字, 列索引数字])
 
print(df.loc['行标签名1':'行标签名2', '列标签名1': '列标签名2'])
print(df.iloc[行索引数字1:行索引数字2, 列索引数字1:列索引数字2])
print(df.iloc[[行索引数字1,行索引数字2,行索引数字3],[列索引数字1,列索引数字2]])
5)其他常用操作
  • 行列操作
# 将行变为列
df_r = df.pivot(index='Date', columns='Type', values='Value')
# 将行变为列 表操作
df_r = pd.pivot_table(df,values='Value', index='Date', columns='Type')
# 融合
pd.melt(df, id_vars=['Date', value_vars=['Type','Value'], value_name=''] )
# 迭代
df.iteritems() 列索引
df.iterrows()  行索引
Date Type Value
2016-03-01 a 12
2016-03-03 b 12
2016-03-05 c 5
2016-03-09 a 45
2016-03-19 b 9
  • 索引操作
#设置、取消索引
df.set_index('Country')         #设置索引
df2 = df.reset_index()          #取消索引
df = df.rename(index=str, columns={'Country':'cntry','Capital':'cptl','Population':'ppltn'})   #重命名DataFrame列名

# 重置索引
s2 = s.reindex(['a','b','c'])
df.reindex(range(4), method='ffill') #前向填充
s3 = s.reindex(range(5), method='bfill') #后向填充

# 基础操作
df.loc[:, (df>1).any()]         #选择任一值大于1的列
df.loc[:, (df>1).all()]         #选择所有值大于1的列
df.loc[:, df.isnull()).any()]   #选择含NaN值的列
df.loc[:, df.notnull()).all()]  #选择不含NaN值的列

# 通过isin选择
df[(df.Country.isin(df2.Type))]  #选择为某一类型的数值
df.filter(items=["a","b"])       #选择特定值
df.select(lambda x: not x%5)     #选择指定元素

# 通过where选择
s.where(s>0)                     #选择子集

# 通过Query选择
df.query('second > first')       #查询DataFrame

# 多重索引
arrays = [np.array([1,2,3]),np.array([5,4,3])]
df = pd.DataFrame(np.random.rand(3,2), index=arrays)
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first','second'])
df2 = pd.DataFrame(np.random.rand(3,2), index=index)
df3.set_index(["Date","Type"])

# 重复数据
s3.unique()   #返回唯一值
df.duplicated('Type')  #查找重复值
df.drop_duplicates('Type', keep='last')   #去除重复值
df.index.duplicated()   #查找重复索引
  • 数据操作
# 数据分组
df.groupby(by=['Date','Type']).mean()
df.groupby(level=0).sum()
df.groupby(level=0).agg({'a':lambda x:sum(x)/len(x), 'b':np.sum()})

# 缺失值
df.dropna()           #去除缺失值NaN
df.fillna(df.mean)    #用预设值填充缺失值NaN
df.replace('a', 'f')  #用一个值替换另一个值

# 合并操作
pd.merge(data1, data2, how='left', on='X1')

# 连接操作
data1.join(data2, how='right')

# 拼接操作
s.append(s2)    # 纵向
# 横向/纵向
pd.concat([s,s2], axis=1, keys=['One', 'Two'])
pd.concat([data1, data2],axis=1, join='inner')

  • 日期操作
df['Date'] = pd.to_datetime(df['Date'])
df['Date'] = pd.date_range('2020-01-02', periods=6, freq='M')
dates = [datetime(2012,5,1), datetime(2012,5,3)]
index = pd.DatetimeIndex(dates)
index = pd.date_range(datetime(2012,2,1), end, freq='BM') #BM是指的每个月的最后一个工作日

相关文章

网友评论

      本文标题:pandas学习

      本文链接:https://www.haomeiwen.com/subject/ykkoddtx.html