Pandas基础笔记

pandas是基于numpy构建的。

目的是使以numpy为中心的应用变得更加简单。
import pandas as pd
from pandas import Series, DataFrame

一、Series类型

1、这个类型类似于一维数组对象。它是由一组数据及一组与之相关的数据标签(索引)组成的。

obj = Series([1, 2, 3, 4, 5, 6])
print(obj)

print(obj.values)

print(obj.index)
obj[5]

2、自定义索引

obj = Series(['a', 'b', 'c', 'd', 'e'], index=[1, 2, 3, 4, 5])
print(obj)

obj[5]

3、类似于字典, 可通过字典转换

data = {'a': 10000, 'b': 20000, 'c':30000}
obj = Series(data)
obj

# 根据index索引转换
keys = ['a', 'c']
obj_1 = Series(data, index=keys)
print(obj_1)

4、缺失数据处理

data = {'a': 10000, 'b': 20000, 'c':30000}
obj = Series(data)
# 判断是否有数据缺失
pd.isnull(obj)

# 判断是否有数据缺失
pd.notnull(obj)

data = {'jack':None, 'tony':55, 'robbin': 50, 'yiming':None}
obj = Series(data)
obj
# None null ''

obj.name = 'NameAndAge'
obj

obj.index.name = '姓名'
obj

二、DataFrame类型

  • DataFrame 是一个表格型数据结构,它含有一组有序的列,每列可以是不同类型的值(数值、字符串、布尔值等都可以);
  • DataFrame 本身有行索引,也有列索引;
  • DataFrame 可以理解成是由Series组成的字典;

1、创建及基本筛选

DataFrame构造函数数据类型 -- 字典、numpy列表、Series类型、DataFrame类型

data = {
    '秦': ['嬴政', '胡亥', '子婴', None],
    '汉': ['刘邦', '刘彻', '刘询', '刘秀'],
    '唐': ['李渊', '李世民', '李治', '武则天'],
    '宋': ['赵匡胤', '赵匡义', '赵恒', '赵祯']
}
frame_data = DataFrame(data)
frame_data

frame_data['汉']

import numpy as np
dates = pd.date_range('20200506', periods=6)
dates

df = pd.DataFrame(np.random.rand(6, 4), index=dates, columns=list('ABCD'))
df

# 转置
df.T

# 筛选 左闭右闭
df['20200506':'20200508']
# loc起始下标为1
df.loc['20200506':'20200508']
df.loc['20200506':'20200508', :]
df.loc[:, ['A', 'B']]
df.loc['20200506':'20200508', ['A', 'B']]
df.loc['20200506', ['A', 'B']]
df.loc['20200506', 'A']

2、头部、尾部筛选

df.head(2)
df.tail(3)

三、Pandas的重新索引

obj = Series([3.5, 2.6, -2.3], index=list('abc'))
obj

obj_1 = obj.reindex(list('abcde'))
obj_1

obj_2 = obj.reindex(list('abcde'), fill_value=0)
obj_2

obj = Series([3.5, 2.6, -2.3], index=[0,2,4])
obj

# 向前填充
obj.reindex(range(6), method='ffill')

# 向后填充
obj.reindex(range(6), method='bfill')

四、算数运算和数据对齐

  • 加法:add
  • 减法:sub
  • 乘法:mul
  • 除法:div
  • 取余:mod
d1 = Series([1.3, 1.5, 2.6, -3.5], index=list('abcd'))
d1

d2 = Series([-1.3, -1.5, -2.6, 3.9, 9.8], index=list('abcde'))
d2

# 加法
d1 + d2

df1 = DataFrame(np.arange(9).reshape((3, 3)), columns=list('abc'), index=list('123'))
df1

df2 = DataFrame(np.arange(12).reshape((4, 3)), columns=list('cde'), index=list('1234'))
df2

# 在行和列上都发生操作,没有重叠的部分都为空
df1 + df2

# 相加时,其中一个为空时默认以‘fill_value’相加
# 两者都为空时,结果为空
df1.add(df2, fill_value=0)

五、DataFrame 和 Series 之间的运算

frame = DataFrame(np.arange(12).reshape((4, 3)), columns=list('bde'), index=[1, 2, 3, 4])
frame

series = frame.loc[1]
series

# 广播相减
frame - series
# 广播相加
frame + series

series_1 = Series(range(3), index=list('bef'))
series_1

# 只有重叠列进行操作,其余为空
frame + series_1

六、排序

1、Series

obj = Series(range(4), index=['d', 'e', 'a', 'b'])
obj

obj.sort_index()

obj.sort_values()

2、DataFrame

frame = DataFrame(np.arange(8).reshape(2,4), index=['two', 'one'], columns=['c', 'd', 'a', 'b'])
frame

frame.sort_index()
frame.sort_index(axis=1)

frame = DataFrame({'b': [4, 7, 1, -1], 'a': [0, 4, 2, 0]})
frame

frame.sort_values(by='b')

七、层次化索引

它能够让你在一个轴上拥有多个索引级别,另外一种说法是它能够使你可以以低纬度形式处理高纬度数据(降维)
1、Series

data = Series(np.random.randn(10), index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],[1, 2, 3, 1, 2, 3, 1, 2, 3, 3]])
data

data.index

data['b']
data['b':'c']
data[:,2]
data['b', 1]

2、DataFrame

frame_data = DataFrame(np.arange(12).reshape(4,3), 
                       index=[['a', 'a', 'b', 'b'], [1,2,1,2]],
                      columns=[['Black', 'Yellow', 'Blue'], ['Green', 'Red', 'Green']])
frame_data

frame_data.index.names = ['key1', 'key2']
frame_data

frame_data.columns.names = ['color1', 'color2']
frame_data

frame_data.index

frame_data['Black']
frame_data.loc['a']
frame_data.loc['a', ['Black']]

frame_data.sum(level='key2')
frame_data.sum(level='color2', axis=1)

八、pandas文本格式数据处理

查看数据:cat data1.csv

# 读文件
pd.read_csv('data1.csv')
pd.read_table('data1.csv', sep=',')
pd.read_csv('data1.csv', header=None)
pd.read_csv('data1.csv',index_col='追问')
pd.read_csv('data1.csv', index_col=['追问','问题'])
pd.read_csv('data2.csv', skiprows=[2])  # 行号是从1开始的
pd.read_csv('data1.csv', nrows=5)


chunker = pd.read_csv('data1.csv', chunksize=10)
chunker
sd = Series([])
for c in chunker:
    sd = sd.add(c['问题'].value_counts(), fill_value=0)
    
sd

# 写文件
data = pd.read_csv('data1.csv', nrows=5)
data.to_csv('test1.data', sep='|')

# excel
pd.read_excel('data3.xlsx')

# 图表显示
excel = pd.read_excel('data3.xlsx', sheet_name='Sheet2')
pl = excel.plot(kind='scatter', x='age', y='p').get_figure()
pl.savefig('1.jpg')

# 图表显示
dates = pd.date_range('20200501', periods=6)
df = DataFrame(np.random.rand(6,4), index=dates, columns=list('abcd'))
df
pl = df.plot(kind='scatter', x='a', y='b').get_figure()
pl.savefig('2.jpg')


你可能感兴趣的:(Pandas基础笔记)