数据蛙数据分析每周作业Pandas

《莫烦Python》笔记 -- pandas部分

2018-12-28  本文已影响8人  小T数据站

3.1 pandas基本介绍

import pandas as pd
import numpy as np

s = pd.Series([1,3,6,np.nan,44,1])
dates = pd.date_range('20160101',periods=6) 
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])
df1 = pd.DataFrame(np.arange(12).reshape((3,4)))
df2 = 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'})
数据框df2
df2.dtypes # 查看数据框各列的数据类型
df2.info() # 补充:更为详尽的数据概览
df2.index  # 查看数据框的索引
df2.columns # 查看数据框的列名
df2.values # 查看数据框的详细数据
df2.describe()  # 对数据框内的数值列进行简单的描述统计
df2.T # 对数据框进行转置
df2.sort_index(axis=1,ascending=False) # 按照索引进行排序,axis=0是默认值,表示按照行索引进行排序,ascending=False表示降序排序
df2.sort_values(by='E') # 按照指定的某列值进行排序

图3.1-1
图3.1-2
图3.1-3
图3.1-4

3.2 pandas选择数据

import pandas as pd
import numpy as np

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A', 'B', 'C', 'D'])

df['A'] # 选取数据框中列名为A的一列数据
df.A # 同样,选取数据框中列名为A的一列数据
df[0:3] # 选取第0列至第3列的数据
df['20130102':'20130104'] # 选取行索引值为20130102至20130104的数据

# select by label : loc 根据索引选取数据
df.loc['20130102']
df.loc[:,['A','B']]
df.loc['20130102',['A','B']]

# select by position : iloc 根据位置选择数据
df.iloc[3]
df.iloc[3,1]
df.iloc[3:5,1:3]
df.iloc[[1,3,5],1:3]

# mixed selection : ix 根据索引和位置选取数据,但ix疑被弃用
df.ix[:3,['A','B']]

# boolean indexing  根据布尔值筛选数据
df[df.A>1]

图3.2-1
图3.2-2
图3.2-3
图3.2-4
图3.2-5
图3.2-6

3.3 pandas设置值

import pandas as pd
import numpy as np

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A', 'B', 'C', 'D'])
df.iloc[2,2] = 1111
df.loc['20130101','B'] = 2222

df[df.A>0]=1
df.A[df.A<0]=-1
df.B[df.A>0]=11

df['E'] = np.nan
df['F'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130101', periods=6))
图3.3-1
3.3-2
图3.3-3
图3.3-4

3.4 pandas处理缺失值

import pandas as pd
import numpy as np

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

df.dropna(axis=0, how='any') 
# how='any'/'all',any表示行或列中存在缺失值就删除那一行或列,而all表示某行或某列全为缺失值才删除,any是默认值

df.fillna(value=0) # 使用value参数指定的值来填充缺失值

pd.isnull(df)
np.any(df.isnull()) == True # 用来查看数据框里是否存在缺失值
图3.4-1
图3.4-2
图3.4-3

3.5 pandas导入导出

3.6 pandas合并concat

import pandas as pd
import numpy as np

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'])
res = pd.concat([df1, df2, df3], axis=0, ignore_index=True) # ignore_index = True 表示忽略原来的索引,重新生成索引

df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])
df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d', 'e'], index=[2,3,4])
res = pd.concat([df1, df2], axis=1, join='outer')  # pd.concat()里参数join的默认值为'outer'
res = pd.concat([df1, df2], axis=1, join='inner')
res = pd.concat([df1, df2], axis=1, join_axes=[df1.index]) # 根据参数join_axes指定的数据框的索引进行连接

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'])
res = df1.append(df2, ignore_index=True)
df3 = df2
res = df1.append([df2,df3], ignore_index=True)
s1 = pd.Series([1,2,3,4], index=['a','b','c','d'])
res = df1.append(s1, ignore_index=True) # 逐行连接 
图3.6-1
图3.6-2
图3.6-3
图3.6-4
图3.6-5
图3.6-6

3.7 pandas合并merge

import pandas as pd
import numpy as np

# 通过键值连接两个数据框
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']})
res = pd.merge(left, right, on='key')

#  考虑用两个键值连接数据框
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                             'key2': ['K0', 'K1', 'K0', 'K1'],
                             'A': ['A0', 'A1', 'A2', 'A3'],
                             'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                              'key2': ['K0', 'K0', 'K0', 'K0'],
                              'C': ['C0', 'C1', 'C2', 'C3'],
                              'D': ['D0', 'D1', 'D2', 'D3']})
res = pd.merge(left, right, on=['key1', 'key2'], how='inner')  # merge里how的默认值为'inner',how = 'left'/'right'/ 'outer'/ 'inner'

df1 = pd.DataFrame({'col1':[0,1], 'col_left':['a','b']})
df2 = pd.DataFrame({'col1':[1,2,2],'col_right':[2,2,2]})
res = pd.merge(df1, df2, on='col1', how='outer', indicator=True)
#在连接后的表里显示连接的双方哪边有数据
# give the indicator a custom name
res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column')

# 通过索引连接数据框
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'])
res = pd.merge(left, right, left_index=True, right_index=True, how='outer')
res = pd.merge(left, right, left_index=True, right_index=True, how='inner')

# handle overlapping  解决进行连接的两个数据框有相同列名的问题
boys = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [1, 2, 3]})
girls = pd.DataFrame({'k': ['K0', 'K0', 'K3'], 'age': [4, 5, 6]})
res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner')
图3.7-1
通过一个键值连接数据框
图3.7-2
通过两个键值连接数据框
图3.7-3
在连接后的表里显示连接的双方哪边有数据
在连接后的表里显示连接的双方哪边有数据-命名
解决重名问题

3.8 pandas plot画图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 对数据列画图
data = pd.Series(np.random.randn(1000), index=np.arange(1000))
data = data.cumsum()
data.plot()
plt.show()
数据列画图
#对数据框数据画图
data = pd.DataFrame(np.random.randn(1000, 4), index=np.arange(1000), columns=list("ABCD"))
data = data.cumsum()
# plot methods:
# 'bar', 'hist', 'box', 'kde', 'area', 'scatter', 'hexbin', 'pie'
ax = data.plot.scatter(x='A', y='B', color='DarkBlue', label="Class 1")
data.plot.scatter(x='A', y='C', color='LightGreen', label='Class 2', ax=ax)
plt.show()
对数据框数据进行画图

照例,文末附上小哥哥的课程地址

上一篇 下一篇

猜你喜欢

热点阅读