04pandas学习

04pandas学习_第1张图片
image.png

基础运算

Series

#1通过一维数组创建序列
arr1 = np.arange(10) #numpy.ndarray
s1 = pd.Series(arr1) #pandas.core.series.Series
#2通过字典的方式创建序列
dic1 = {'a':10,'b':20,'c':30,'d':40,'e':50} #dict
s2 = pd.Series(dic1) #pandas.core.series.Series

DataFrame

arr1 = np.arange(10) #numpy.ndarray
s1 = pd.Series(arr1) #pandas.core.series.Series
dic1 = {'a':10,'b':20,'c':30,'d':40,'e':50} #dict
s2 = pd.Series(dic1) #pandas.core.series.Series

dic3 = {'one':{'a':1,'b':2,'c':3,'d':4},
        'two':{'a':5,'b':6,'c':7,'d':8},
        'three':{'a':9,'b':10,'c':11,'d':12}}#dict
df3 = pd.DataFrame(dic3) #pandas.core.frame.DataFrame
df2 = df3[['one']] #pandas.core.frame.DataFrame
'''
df4
one
a    1
b    2
c    3
d    4
'''
属性
print(df2)
print(df2.dtypes)
print(df2.index)
print(df2.columns)
print(df2.values)
print(df2.describe())

复杂运算

选择数据

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),
                  index=dates, columns=['A','B','C','D'])
             A   B   C   D
2013-01-01   0   1   2   3
2013-01-02   4   5   6   7
2013-01-03   8   9  10  11
2013-01-04  12  13  14  15
2013-01-05  16  17  18  19
2013-01-06  20  21  22  23
多行或多列df[0:3]
根据标签 loc选择行或者列的数据df.loc['20130102',['A','B']]
根据序列 iloc,用位置进行选择
混合的这两种 ix,df.ix[:3,['A','C']]
通过判断的筛选,print(df[df.A>8])

设置值

利用索引或者标签确定需要修改值的位置
df.iloc[2,2] = 1111
df.loc['20130101','B'] = 2222
根据条件设置 
df.B[df.A>4] = 0

处理丢失数据

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6,4)),
                  index=dates, columns=['A','B','C','D'])
df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan
          A     B     C   D
2013-01-01   0   NaN   2.0   3
2013-01-02   4   5.0   NaN   7
2013-01-03   8   9.0  10.0  11
2013-01-04  12  13.0  14.0  15
2013-01-05  16  17.0  18.0  19
2013-01-06  20  21.0  22.0  23
直接去掉有 NaN 的行或列, 可以使用 dropna
df.dropna(
    axis=0,     # 0: 对行进行操作; 1: 对列进行操作
    how='any'   # 'any': 只要存在 NaN 就 drop 掉; 'all': 必须全部是 NaN 才 drop 
    ) 
将 NaN 的值用其他值代替,比如0;df.fillna(value=0)
判断是否有缺失数据 NaN, 为 True 表示缺失数据;df.isnull() 

导入导出

pandas可以读取与存取的资料格式有很多种,像csv、excel、json、html与pickle等
import pandas as pd #加载模块
#读取csv
data = pd.read_csv('student.csv')
将资料存取成pickle;data.to_pickle('student.pickle')

合并concat

#定义数据
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d'])

#concat纵向合并,下面这两张注意行序号的变化!!
res = pd.concat([df1, df2, df3], axis=0)
res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)
join='outer'为预设值,因此未设定任何参数时,函数默认join='outer'。
此方式是依照column来做纵向合并,有相同的column上下合并在一起,
其他独自的column个自成列,原本没有值的位置皆以NaN填充。
#纵向"外"合并df1与df2,扩大了
res = pd.concat([df1, df2], axis=0, join='outer')
#纵向"内"合并df1与df2,缩小了
res = pd.concat([df1, df2], axis=0, join='inner')
join_axes (依照 axes 合并) 
#依照`df1.index`进行横向合并
res = pd.concat([df1, df2], axis=1, join_axes=[df1.index])
append只有纵向合并,没有横向合并。

合并 merge

pandas中的merge和concat类似,但主要是用于两组有key column的数据,统一索引的数据. 
通常也被用在Database的处理当中.
#定义资料集并打印出
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                             'A': ['A0', 'A1', 'A2', 'A3'],
                             'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                              'C': ['C0', 'C1', 'C2', 'C3'],
                              'D': ['D0', 'D1', 'D2', 'D3']})
#依据key column合并,并打印出
res = pd.merge(left, right, on='key')
#依据key1与key2 columns进行合并,并打印出四种结果['left', 'right', 'outer', 'inner']
res = pd.merge(left, right, on=['key1', 'key2'], how='inner')
indicator=True会将合并的记录放在新的一列
# 依据col1进行合并,并启用indicator=True,最后打印出
res = pd.merge(df1, df2, on='col1', how='outer', indicator=True)
# 自定indicator column的名称,并打印出
res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column')
#定义资料集
boys = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [1, 2, 3]})
girls = pd.DataFrame({'k': ['K0', 'K0', 'K3'], 'age': [4, 5, 6]})

#使用suffixes解决overlapping的问题
res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner')
依据index合并
#定义资料集并打印出
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                     'B': ['B0', 'B1', 'B2']},
                     index=['K0', 'K1', 'K2'])
right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
                      'D': ['D0', 'D2', 'D3']},
                     index=['K0', 'K2', 'K3'])
#依据左右资料集的index进行合并,how='outer',并打印出
res = pd.merge(left, right, left_index=True, right_index=True, how='outer')
#依据左右资料集的index进行合并,how='inner',并打印出
res = pd.merge(left, right, left_index=True, right_index=True, how='inner')

参考

Python数据分析之pandas学习

莫烦python教程
https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/3-1-pd-intro/
数据科学入门篇3:数据处理利器Pandas使用手册
https://zhuanlan.zhihu.com/p/25184830

你可能感兴趣的:(04pandas学习)